diff --git a/patches/1-20-6/unapplied-server/0003-Fix-pufferfish-issues.patch b/patches/1-20-6/unapplied-server/0003-Fix-pufferfish-issues.patch deleted file mode 100644 index cae584b75..000000000 --- a/patches/1-20-6/unapplied-server/0003-Fix-pufferfish-issues.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: BillyGalbreath -Date: Sun, 12 Jun 2022 09:18:57 -0500 -Subject: [PATCH] Fix pufferfish issues - - -diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -index 6464682e2f93659e73aca491031c8051ab000033..5a73aa17a963ae2d57e9bd5b5e3e5b0030d06216 100644 ---- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -@@ -86,7 +86,7 @@ public class PufferfishConfig { - // Attempt to detect vectorization - try { - SIMDDetection.isEnabled = SIMDDetection.canEnable(PufferfishLogger.LOGGER); -- SIMDDetection.versionLimited = SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18 && SIMDDetection.getJavaVersion() != 19; -+ SIMDDetection.versionLimited = SIMDDetection.getJavaVersion() < 17 || SIMDDetection.getJavaVersion() > 21; - } catch (NoClassDefFoundError | Exception ignored) { - ignored.printStackTrace(); - } -@@ -94,7 +94,7 @@ public class PufferfishConfig { - if (SIMDDetection.isEnabled) { - PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions."); - } else if (SIMDDetection.versionLimited) { -- PufferfishLogger.LOGGER.warning("Will not enable SIMD! These optimizations are only safely supported on Java 17, Java 18, and Java 19."); -+ PufferfishLogger.LOGGER.warning("Will not enable SIMD! These optimizations are only safely supported on Java 17 through Java 21."); - } else { - PufferfishLogger.LOGGER.warning("SIMD operations are available for your server, but are not configured!"); - PufferfishLogger.LOGGER.warning("To enable additional optimizations, add \"--add-modules=jdk.incubator.vector\" to your startup flags, BEFORE the \"-jar\"."); -@@ -232,7 +232,7 @@ public class PufferfishConfig { - public static int activationDistanceMod; - - private static void dynamicActivationOfBrains() throws IOException { -- dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", true); -+ dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", false); // Purpur - startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, - "This value determines how far away an entity has to be", - "from the player to start being effected by DEAR."); -@@ -276,7 +276,7 @@ public class PufferfishConfig { - - public static boolean throttleInactiveGoalSelectorTick; - private static void inactiveGoalSelectorThrottle() { -- throttleInactiveGoalSelectorTick = getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, -+ throttleInactiveGoalSelectorTick = getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", false, // Purpur - "Throttles the AI goal selector in entity inactive ticks.", - "This can improve performance by a few percent, but has minor gameplay implications."); - } -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index fbffe3dab1b7812b50df5d6bddf4fbdb2e583339..881ba370b098a4a202fbfb9c5c3d9304719d155e 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -992,7 +992,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - } - // Paper start - optimise random block ticking - private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); -- // private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(); // Pufferfish - moved to super -+ private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - moved to super // Purpur - dont break ABI - // Paper end - - private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1aa45e64e49ea011c2ba5e943b4e72c4f3a47176..6f7b34357788faecf8368cc9a27d26585935f789 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -825,7 +825,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - public void tick() { - // Pufferfish start - entity TTL - if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) { -- discard(); -+ discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur - return; - } - // Pufferfish end - entity TTL -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 837f68825f601971f374be47952b23108bf66ba6..2a8a8030feefae84e394460612405887e63f2ac7 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -64,7 +64,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { - if (!isLoaded) { - if (Projectile.loadedThisTick > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerTick) { - if (++this.loadedLifetime > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerProjectile) { -- this.discard(); -+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur - } - return; - } -diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index a82de7111915b19cdc3f065910465a5e7e843aff..fc32b6342b7553265f2a012f91f4dd9c0386f8f2 100644 ---- a/src/main/java/net/minecraft/world/level/Level.java -+++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -215,8 +215,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Paper end - - 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 -+ -+ //protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter // Purpur - dont break ABI - - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor - this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot -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 270a892373ecbb3982990d6201d79c8a66de4f60..d087c8271dbdfe3dc6d805539a710d37ed6d7f21 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -122,7 +122,7 @@ public class LevelChunk extends ChunkAccess { - this.blockTicks = blockTickScheduler; - this.fluidTicks = fluidTickScheduler; - -- this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick -+ this.lightningTick = java.util.concurrent.ThreadLocalRandom.current().nextInt(100000) << 1; // Pufferfish - initialize lightning tick // Purpur - any random will do - } - - // CraftBukkit start diff --git a/patches/1-20-6/unapplied-api/0001-Pufferfish-API-Changes.patch b/patches/api/0001-Pufferfish-API-Changes.patch similarity index 97% rename from patches/1-20-6/unapplied-api/0001-Pufferfish-API-Changes.patch rename to patches/api/0001-Pufferfish-API-Changes.patch index 1fbc75a41..7f00ccc11 100644 --- a/patches/1-20-6/unapplied-api/0001-Pufferfish-API-Changes.patch +++ b/patches/api/0001-Pufferfish-API-Changes.patch @@ -20,10 +20,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index 04853c43b99951bf0d4c96ef73724625bdaf018f..9164120d299d062c62529a7ef74eac0ded367993 100644 +index 540fe7e2c110e79c3742f229b3ed8c54b101d260..07945418e95cbe07c45bfa815d828fa311c7f033 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -51,6 +51,7 @@ dependencies { +@@ -52,6 +52,7 @@ dependencies { apiAndDocs("net.kyori:adventure-text-logger-slf4j") api("org.apache.logging.log4j:log4j-api:$log4jVersion") api("org.slf4j:slf4j-api:$slf4jVersion") @@ -31,7 +31,7 @@ index 04853c43b99951bf0d4c96ef73724625bdaf018f..9164120d299d062c62529a7ef74eac0d implementation("org.ow2.asm:asm:9.7") implementation("org.ow2.asm:asm-commons:9.7") -@@ -109,6 +110,13 @@ val generateApiVersioningFile by tasks.registering { +@@ -130,6 +131,13 @@ val generateApiVersioningFile by tasks.registering { } } @@ -214,7 +214,7 @@ index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8e +} diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java new file mode 100644 -index 0000000000000000000000000000000000000000..ab5fea0b03224bf249352ce340e94704ff713345 +index 0000000000000000000000000000000000000000..3441cdad70da1bd523c5933b1a914688718c2657 --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java @@ -0,0 +1,40 @@ @@ -235,7 +235,7 @@ index 0000000000000000000000000000000000000000..ab5fea0b03224bf249352ce340e94704 + @Deprecated + public static boolean canEnable(Logger logger) { + try { -+ if (SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18 && SIMDDetection.getJavaVersion() != 19) { ++ if (SIMDDetection.getJavaVersion() < 17 || SIMDDetection.getJavaVersion() > 21) { + return false; + } else { + SIMDDetection.testRun = true; @@ -426,10 +426,10 @@ index c80faa079eca1564847070f0338fc98024639829..e632d51d3487eb4807243b6705999ad1 } diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index fc2dae69165776d08274e34a69962cc70445f411..899d67fa782fac639fe7fb096e05c551d75bd647 100644 +index 003bece642b682985625db93cad93026352bfc66..e8ba4f1108f2548a487877027e37d81fc150e042 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -@@ -584,7 +584,9 @@ public final class SimplePluginManager implements PluginManager { +@@ -597,7 +597,9 @@ public final class SimplePluginManager implements PluginManager { // Paper start private void handlePluginException(String msg, Throwable ex, Plugin plugin) { @@ -439,7 +439,7 @@ index fc2dae69165776d08274e34a69962cc70445f411..899d67fa782fac639fe7fb096e05c551 callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerPluginEnableDisableException(msg, ex, plugin))); } // Paper end -@@ -654,9 +656,11 @@ public final class SimplePluginManager implements PluginManager { +@@ -667,9 +669,11 @@ public final class SimplePluginManager implements PluginManager { )); } } catch (Throwable ex) { diff --git a/patches/1-20-6/unapplied-api/0002-Fix-pufferfish-issues.patch b/patches/api/0002-Fix-pufferfish-issues.patch similarity index 51% rename from patches/1-20-6/unapplied-api/0002-Fix-pufferfish-issues.patch rename to patches/api/0002-Fix-pufferfish-issues.patch index b6b893fd9..85559ee90 100644 --- a/patches/1-20-6/unapplied-api/0002-Fix-pufferfish-issues.patch +++ b/patches/api/0002-Fix-pufferfish-issues.patch @@ -4,21 +4,26 @@ Date: Tue, 4 Jan 2022 23:05:41 -0600 Subject: [PATCH] Fix pufferfish issues -diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java -index ab5fea0b03224bf249352ce340e94704ff713345..3441cdad70da1bd523c5933b1a914688718c2657 100644 ---- a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java -+++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java -@@ -15,7 +15,7 @@ public class SIMDChecker { - @Deprecated - public static boolean canEnable(Logger logger) { - try { -- if (SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18 && SIMDDetection.getJavaVersion() != 19) { -+ if (SIMDDetection.getJavaVersion() < 17 || SIMDDetection.getJavaVersion() > 21) { - return false; - } else { - SIMDDetection.testRun = true; +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java +index 9df9d09aa477d4cd3c496ba0933c816df1ef0964..2655f98322bcab8622e5f84db1085c3b1f5174b7 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java +@@ -18,6 +18,13 @@ public interface ServerBuildInfo { + */ + Key BRAND_PAPER_ID = Key.key("papermc", "paper"); + ++ // Purpur start ++ /** ++ * The brand id for Pufferfish. ++ */ ++ Key BRAND_PUFFERFISH_ID = Key.key("pufferfish", "pufferfish"); ++ // Purpur end ++ + /** + * Gets the {@code ServerBuildInfo}. + * diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java -index 88f1ca89fa640a686231b8eec87e70419b2d73ef..d6b91c49a267c89d7df2ddee7ccfe64675d117be 100644 +index b82f07a2879412f6b30643ca93a97439aa49a98a..6369124775f8b51b10476a6819969fd075cb61e1 100644 --- a/src/test/java/org/bukkit/AnnotationTest.java +++ b/src/test/java/org/bukkit/AnnotationTest.java @@ -47,6 +47,10 @@ public class AnnotationTest { diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0003-Rebrand.patch similarity index 72% rename from patches/api/0001-Rebrand.patch rename to patches/api/0003-Rebrand.patch index 32f36462b..7427e0cae 100644 --- a/patches/api/0001-Rebrand.patch +++ b/patches/api/0003-Rebrand.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Rebrand diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java -index 9df9d09aa477d4cd3c496ba0933c816df1ef0964..7107eabf02d9d9b69d97c978ba421ad52031ec3f 100644 +index 2655f98322bcab8622e5f84db1085c3b1f5174b7..8c2c5ea14a839c8767bbf120ae5512f65475cbb0 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfo.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java -@@ -18,6 +18,13 @@ public interface ServerBuildInfo { - */ - Key BRAND_PAPER_ID = Key.key("papermc", "paper"); +@@ -25,6 +25,13 @@ public interface ServerBuildInfo { + Key BRAND_PUFFERFISH_ID = Key.key("pufferfish", "pufferfish"); + // Purpur end + // Purpur start + /** diff --git a/patches/api/0002-Purpur-config-files.patch b/patches/api/0004-Purpur-config-files.patch similarity index 100% rename from patches/api/0002-Purpur-config-files.patch rename to patches/api/0004-Purpur-config-files.patch diff --git a/patches/api/0003-Build-System-Changes.patch b/patches/api/0005-Build-System-Changes.patch similarity index 85% rename from patches/api/0003-Build-System-Changes.patch rename to patches/api/0005-Build-System-Changes.patch index b50c166d1..b4123cae3 100644 --- a/patches/api/0003-Build-System-Changes.patch +++ b/patches/api/0005-Build-System-Changes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Build System Changes diff --git a/build.gradle.kts b/build.gradle.kts -index fd39ed209b20c927054b8482c400beeeeab460a3..6aef83558a5ef7e84873b127c3bb43a6468c9a24 100644 +index 07945418e95cbe07c45bfa815d828fa311c7f033..b7d584c8b96eb7699e5df90ed04bf22ee256d571 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -142,6 +142,8 @@ tasks.jar { +@@ -150,6 +150,8 @@ tasks.jar { } tasks.withType { diff --git a/patches/api/0004-Purpur-client-support.patch b/patches/api/0006-Purpur-client-support.patch similarity index 100% rename from patches/api/0004-Purpur-client-support.patch rename to patches/api/0006-Purpur-client-support.patch diff --git a/patches/api/0005-Default-permissions.patch b/patches/api/0007-Default-permissions.patch similarity index 100% rename from patches/api/0005-Default-permissions.patch rename to patches/api/0007-Default-permissions.patch diff --git a/patches/api/0006-Ridables.patch b/patches/api/0008-Ridables.patch similarity index 100% rename from patches/api/0006-Ridables.patch rename to patches/api/0008-Ridables.patch diff --git a/patches/api/0007-Allow-inventory-resizing.patch b/patches/api/0009-Allow-inventory-resizing.patch similarity index 100% rename from patches/api/0007-Allow-inventory-resizing.patch rename to patches/api/0009-Allow-inventory-resizing.patch diff --git a/patches/api/0008-Llama-API.patch b/patches/api/0010-Llama-API.patch similarity index 100% rename from patches/api/0008-Llama-API.patch rename to patches/api/0010-Llama-API.patch diff --git a/patches/api/0009-AFK-API.patch b/patches/api/0011-AFK-API.patch similarity index 100% rename from patches/api/0009-AFK-API.patch rename to patches/api/0011-AFK-API.patch diff --git a/patches/api/0010-Bring-back-server-name.patch b/patches/api/0012-Bring-back-server-name.patch similarity index 100% rename from patches/api/0010-Bring-back-server-name.patch rename to patches/api/0012-Bring-back-server-name.patch diff --git a/patches/api/0011-ExecuteCommandEvent.patch b/patches/api/0013-ExecuteCommandEvent.patch similarity index 100% rename from patches/api/0011-ExecuteCommandEvent.patch rename to patches/api/0013-ExecuteCommandEvent.patch diff --git a/patches/api/0012-Lagging-threshold.patch b/patches/api/0014-Lagging-threshold.patch similarity index 100% rename from patches/api/0012-Lagging-threshold.patch rename to patches/api/0014-Lagging-threshold.patch diff --git a/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0015-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/api/0015-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/api/0014-Anvil-API.patch b/patches/api/0016-Anvil-API.patch similarity index 100% rename from patches/api/0014-Anvil-API.patch rename to patches/api/0016-Anvil-API.patch diff --git a/patches/api/0015-ItemStack-convenience-methods.patch b/patches/api/0017-ItemStack-convenience-methods.patch similarity index 99% rename from patches/api/0015-ItemStack-convenience-methods.patch rename to patches/api/0017-ItemStack-convenience-methods.patch index 777e8fa45..3109d8b29 100644 --- a/patches/api/0015-ItemStack-convenience-methods.patch +++ b/patches/api/0017-ItemStack-convenience-methods.patch @@ -50,7 +50,7 @@ index 54704da43cf9c429f3914f0580246dde99aa93c0..e1a677cfde05aba487a09e34e170fea6 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 8bbd98ea729755e7666403b96f277fd419560951..cb37a8af9e54349fc8a3eb70bbe2fddaaa3767d6 100644 +index b3abe3bde05d4a360e31e490bff8a859dc2bd4a6..9b8b958ce181b60eb5db89d4720380153152a2ac 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -19,6 +19,17 @@ import org.bukkit.inventory.meta.ItemMeta; diff --git a/patches/api/0016-ChatColor-conveniences.patch b/patches/api/0018-ChatColor-conveniences.patch similarity index 100% rename from patches/api/0016-ChatColor-conveniences.patch rename to patches/api/0018-ChatColor-conveniences.patch diff --git a/patches/api/0017-Item-entity-immunities.patch b/patches/api/0019-Item-entity-immunities.patch similarity index 100% rename from patches/api/0017-Item-entity-immunities.patch rename to patches/api/0019-Item-entity-immunities.patch diff --git a/patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0020-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/api/0020-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/api/0019-Rabid-Wolf-API.patch b/patches/api/0021-Rabid-Wolf-API.patch similarity index 100% rename from patches/api/0019-Rabid-Wolf-API.patch rename to patches/api/0021-Rabid-Wolf-API.patch diff --git a/patches/api/0020-PlayerBookTooLargeEvent.patch b/patches/api/0022-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/api/0020-PlayerBookTooLargeEvent.patch rename to patches/api/0022-PlayerBookTooLargeEvent.patch diff --git a/patches/api/0021-Full-netherite-armor-grants-fire-resistance.patch b/patches/api/0023-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/api/0021-Full-netherite-armor-grants-fire-resistance.patch rename to patches/api/0023-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/api/0022-Add-EntityTeleportHinderedEvent.patch b/patches/api/0024-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/api/0022-Add-EntityTeleportHinderedEvent.patch rename to patches/api/0024-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/api/0023-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0025-Add-enchantment-target-for-bows-and-crossbows.patch similarity index 100% rename from patches/api/0023-Add-enchantment-target-for-bows-and-crossbows.patch rename to patches/api/0025-Add-enchantment-target-for-bows-and-crossbows.patch diff --git a/patches/api/0024-API-for-any-mob-to-burn-daylight.patch b/patches/api/0026-API-for-any-mob-to-burn-daylight.patch similarity index 100% rename from patches/api/0024-API-for-any-mob-to-burn-daylight.patch rename to patches/api/0026-API-for-any-mob-to-burn-daylight.patch diff --git a/patches/api/0025-Add-back-player-spawned-endermite-API.patch b/patches/api/0027-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/api/0025-Add-back-player-spawned-endermite-API.patch rename to patches/api/0027-Add-back-player-spawned-endermite-API.patch diff --git a/patches/api/0026-Fix-default-permission-system.patch b/patches/api/0028-Fix-default-permission-system.patch similarity index 100% rename from patches/api/0026-Fix-default-permission-system.patch rename to patches/api/0028-Fix-default-permission-system.patch diff --git a/patches/api/0027-Summoner-API.patch b/patches/api/0029-Summoner-API.patch similarity index 100% rename from patches/api/0027-Summoner-API.patch rename to patches/api/0029-Summoner-API.patch diff --git a/patches/api/0028-Clean-up-version-command-output.patch b/patches/api/0030-Clean-up-version-command-output.patch similarity index 100% rename from patches/api/0028-Clean-up-version-command-output.patch rename to patches/api/0030-Clean-up-version-command-output.patch diff --git a/patches/api/0029-Extended-OfflinePlayer-API.patch b/patches/api/0031-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/api/0029-Extended-OfflinePlayer-API.patch rename to patches/api/0031-Extended-OfflinePlayer-API.patch diff --git a/patches/api/0030-Added-the-ability-to-add-combustible-items.patch b/patches/api/0032-Added-the-ability-to-add-combustible-items.patch similarity index 100% rename from patches/api/0030-Added-the-ability-to-add-combustible-items.patch rename to patches/api/0032-Added-the-ability-to-add-combustible-items.patch diff --git a/patches/api/0031-Grindstone-API.patch b/patches/api/0033-Grindstone-API.patch similarity index 100% rename from patches/api/0031-Grindstone-API.patch rename to patches/api/0033-Grindstone-API.patch diff --git a/patches/api/0032-Shears-can-have-looting-enchantment.patch b/patches/api/0034-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/api/0032-Shears-can-have-looting-enchantment.patch rename to patches/api/0034-Shears-can-have-looting-enchantment.patch diff --git a/patches/api/0033-Lobotomize-stuck-villagers.patch b/patches/api/0035-Lobotomize-stuck-villagers.patch similarity index 100% rename from patches/api/0033-Lobotomize-stuck-villagers.patch rename to patches/api/0035-Lobotomize-stuck-villagers.patch diff --git a/patches/api/0034-Add-local-difficulty-api.patch b/patches/api/0036-Add-local-difficulty-api.patch similarity index 100% rename from patches/api/0034-Add-local-difficulty-api.patch rename to patches/api/0036-Add-local-difficulty-api.patch diff --git a/patches/api/0035-Remove-Timings.patch b/patches/api/0037-Remove-Timings.patch similarity index 100% rename from patches/api/0035-Remove-Timings.patch rename to patches/api/0037-Remove-Timings.patch diff --git a/patches/api/0036-Add-Bee-API.patch b/patches/api/0038-Add-Bee-API.patch similarity index 100% rename from patches/api/0036-Add-Bee-API.patch rename to patches/api/0038-Add-Bee-API.patch diff --git a/patches/api/0037-Debug-Marker-API.patch b/patches/api/0039-Debug-Marker-API.patch similarity index 100% rename from patches/api/0037-Debug-Marker-API.patch rename to patches/api/0039-Debug-Marker-API.patch diff --git a/patches/api/0038-Add-death-screen-API.patch b/patches/api/0040-Add-death-screen-API.patch similarity index 100% rename from patches/api/0038-Add-death-screen-API.patch rename to patches/api/0040-Add-death-screen-API.patch diff --git a/patches/api/0039-Language-API.patch b/patches/api/0041-Language-API.patch similarity index 100% rename from patches/api/0039-Language-API.patch rename to patches/api/0041-Language-API.patch diff --git a/patches/api/0040-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0042-Add-log-suppression-for-LibraryLoader.patch similarity index 96% rename from patches/api/0040-Add-log-suppression-for-LibraryLoader.patch rename to patches/api/0042-Add-log-suppression-for-LibraryLoader.patch index 89e515574..182f6f25e 100644 --- a/patches/api/0040-Add-log-suppression-for-LibraryLoader.patch +++ b/patches/api/0042-Add-log-suppression-for-LibraryLoader.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add log suppression for LibraryLoader diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..f1e58639213be0c43cd2ff090b625e7d0a67e8be 100644 +index 301e82369603f3dd6e6c1bd380da4bacacd7ef6c..0c6ca7588fb3d6b6497ddf032fe75e5c6c9719e5 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -55,6 +55,7 @@ public final class JavaPluginLoader implements PluginLoader { diff --git a/patches/api/0041-Fire-Immunity-API.patch b/patches/api/0043-Fire-Immunity-API.patch similarity index 100% rename from patches/api/0041-Fire-Immunity-API.patch rename to patches/api/0043-Fire-Immunity-API.patch diff --git a/patches/api/0042-Added-goat-ram-event.patch b/patches/api/0044-Added-goat-ram-event.patch similarity index 100% rename from patches/api/0042-Added-goat-ram-event.patch rename to patches/api/0044-Added-goat-ram-event.patch diff --git a/patches/api/0043-Add-PreExplodeEvents.patch b/patches/api/0045-Add-PreExplodeEvents.patch similarity index 100% rename from patches/api/0043-Add-PreExplodeEvents.patch rename to patches/api/0045-Add-PreExplodeEvents.patch diff --git a/patches/api/0044-Stored-Bee-API.patch b/patches/api/0046-Stored-Bee-API.patch similarity index 100% rename from patches/api/0044-Stored-Bee-API.patch rename to patches/api/0046-Stored-Bee-API.patch diff --git a/patches/api/0045-Explorer-Map-API.patch b/patches/api/0047-Explorer-Map-API.patch similarity index 100% rename from patches/api/0045-Explorer-Map-API.patch rename to patches/api/0047-Explorer-Map-API.patch diff --git a/patches/api/0046-Stonecutter-damage.patch b/patches/api/0048-Stonecutter-damage.patch similarity index 100% rename from patches/api/0046-Stonecutter-damage.patch rename to patches/api/0048-Stonecutter-damage.patch diff --git a/patches/1-20-6/unapplied-server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch similarity index 66% rename from patches/1-20-6/unapplied-server/0001-Pufferfish-Server-Changes.patch rename to patches/server/0001-Pufferfish-Server-Changes.patch index 40944d98b..ed50da5d3 100644 --- a/patches/1-20-6/unapplied-server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -20,42 +20,36 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index bcfe59b6efb628ee1e7f9d60667360d4d885fb6a..4517548e2c892c2e94f91e7449660f9e36b8f14e 100644 +index 421f6b3dc8890d63d2e7aa774d0bf8f7e15890ab..fd1ac5dbc39068d4332fd264f3359e4845e529e1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { +@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { - implementation(project(":paper-api")) -- implementation(project(":paper-mojangapi")) + implementation(project(":pufferfish-api")) // Pufferfish // Paper -+ // Pufferfish start -+ implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") { -+ exclude("io.papermc.paper", "paper-api") -+ } -+ // Pufferfish end // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -50,6 +54,13 @@ dependencies { +@@ -47,6 +47,13 @@ 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") + // Pufferfish start + implementation("org.yaml:snakeyaml:1.32") -+ implementation ("com.github.carleslc.Simple-YAML:Simple-Yaml:1.8.4") { ++ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.8.4") { + exclude(group="org.yaml", module="snakeyaml") + } + // Pufferfish end + testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test - testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") + testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -59,6 +70,14 @@ dependencies { +@@ -71,6 +78,14 @@ paperweight { + craftBukkitPackageVersion.set("v1_21_R1") // also needs to be updated in MappingEnvironment } - val craftbukkitPackageVersion = "1_20_R3" // Paper + +// Pufferfish Start +tasks.withType { @@ -67,15 +61,26 @@ index bcfe59b6efb628ee1e7f9d60667360d4d885fb6a..4517548e2c892c2e94f91e7449660f9e tasks.jar { archiveClassifier.set("dev") -@@ -71,7 +90,7 @@ tasks.jar { +@@ -84,14 +99,14 @@ tasks.jar { + val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Paper-$implementationVersion", -+ "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish +- "Implementation-Title" to "Paper", ++ "Implementation-Title" to "Pufferfish", // Pufferfish + "Implementation-Version" to implementationVersion, "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", +- "Specification-Title" to "Paper", ++ "Specification-Title" to "Pufferfish", // Pufferfish "Specification-Version" to project.version, +- "Specification-Vendor" to "Paper Team", +- "Brand-Id" to "papermc:paper", +- "Brand-Name" to "Paper", ++ "Specification-Vendor" to "Pufferfish Studios LLC", // Pufferfish ++ "Brand-Id" to "pufferfish:pufferfish", // Pufferfish ++ "Brand-Name" to "Pufferfish", // Pufferfish + "Build-Number" to (build ?: ""), + "Build-Time" to Instant.now().toString(), + "Git-Branch" to gitBranch, // Paper diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java index 7620c72a4c243cbeea245203ce03a97cbfa7d922..b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java @@ -117,42 +122,6 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); -diff --git a/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java b/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java -index 41b9405d6759d865e0d14dd4f95163e9690e967d..091b1ae822e1c0517e59572e7a9bda11e998c0ee 100644 ---- a/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java -+++ b/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java -@@ -26,7 +26,7 @@ public abstract class AreaMap { - - // we use linked for better iteration. - // map of: coordinate to set of objects in coordinate -- protected final Long2ObjectOpenHashMap> areaMap = new Long2ObjectOpenHashMap<>(1024, 0.7f); -+ protected Long2ObjectOpenHashMap> areaMap = new Long2ObjectOpenHashMap<>(1024, 0.7f); // Pufferfish - not actually final - protected final PooledLinkedHashSets pooledHashSets; - - protected final ChangeCallback addCallback; -@@ -160,7 +160,8 @@ public abstract class AreaMap { - protected abstract PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getEmptySetFor(final E object); - - // expensive op, only for debug -- protected void validate(final E object, final int viewDistance) { -+ protected void validate0(final E object, final int viewDistance) { // Pufferfish - rename this thing just in case it gets used I'd rather a compile time error. -+ if (true) throw new UnsupportedOperationException(); // Pufferfish - not going to put in the effort to fix this if it doesn't ever get used. - int entiesGot = 0; - int expectedEntries = (2 * viewDistance + 1); - expectedEntries *= expectedEntries; -diff --git a/src/main/java/com/destroystokyo/paper/util/misc/PlayerAreaMap.java b/src/main/java/com/destroystokyo/paper/util/misc/PlayerAreaMap.java -index 46954db7ecd35ac4018fdf476df7c8020d7ce6c8..1ad890a244bdf6df48a8db68cb43450e08c788a6 100644 ---- a/src/main/java/com/destroystokyo/paper/util/misc/PlayerAreaMap.java -+++ b/src/main/java/com/destroystokyo/paper/util/misc/PlayerAreaMap.java -@@ -5,7 +5,7 @@ import net.minecraft.server.level.ServerPlayer; - /** - * @author Spottedleaf - */ --public final class PlayerAreaMap extends AreaMap { -+public class PlayerAreaMap extends AreaMap { // Pufferfish - not actually final - - public PlayerAreaMap() { - super(); diff --git a/src/main/java/gg/airplane/structs/FluidDirectionCache.java b/src/main/java/gg/airplane/structs/FluidDirectionCache.java new file mode 100644 index 0000000000000000000000000000000000000000..aa8467b9dda1f7707e41f50ac7b3e9d7343723ec @@ -295,251 +264,6 @@ index 0000000000000000000000000000000000000000..aa8467b9dda1f7707e41f50ac7b3e9d7 + this.entries[toRemovePos] = new FluidDirectionEntry(data, flag); + } +} -diff --git a/src/main/java/gg/airplane/structs/ItemListWithBitset.java b/src/main/java/gg/airplane/structs/ItemListWithBitset.java -new file mode 100644 -index 0000000000000000000000000000000000000000..1b7a4ee47f4445d7f2ac91d3a73ae113edbdddb2 ---- /dev/null -+++ b/src/main/java/gg/airplane/structs/ItemListWithBitset.java -@@ -0,0 +1,114 @@ -+package gg.airplane.structs; -+ -+import net.minecraft.core.NonNullList; -+import net.minecraft.world.item.ItemStack; -+import org.apache.commons.lang.Validate; -+import org.jetbrains.annotations.NotNull; -+import org.jetbrains.annotations.Nullable; -+ -+import java.util.AbstractList; -+import java.util.Arrays; -+import java.util.List; -+ -+public class ItemListWithBitset extends AbstractList { -+ public static ItemListWithBitset fromList(List list) { -+ if (list instanceof ItemListWithBitset ours) { -+ return ours; -+ } -+ return new ItemListWithBitset(list); -+ } -+ -+ private static ItemStack[] createArray(int size) { -+ ItemStack[] array = new ItemStack[size]; -+ Arrays.fill(array, ItemStack.EMPTY); -+ return array; -+ } -+ -+ private final ItemStack[] items; -+ -+ private long bitSet = 0; -+ private final long allBits; -+ -+ private static class OurNonNullList extends NonNullList { -+ protected OurNonNullList(List delegate) { -+ super(delegate, ItemStack.EMPTY); -+ } -+ } -+ -+ public final NonNullList nonNullList = new OurNonNullList(this); -+ -+ private ItemListWithBitset(List list) { -+ this(list.size()); -+ -+ for (int i = 0; i < list.size(); i++) { -+ this.set(i, list.get(i)); -+ } -+ } -+ -+ public ItemListWithBitset(int size) { -+ Validate.isTrue(size < Long.BYTES * 8, "size is too large"); -+ -+ this.items = createArray(size); -+ this.allBits = ((1L << size) - 1); -+ } -+ -+ public boolean isCompletelyEmpty() { -+ return this.bitSet == 0; -+ } -+ -+ public boolean hasFullStacks() { -+ return (this.bitSet & this.allBits) == allBits; -+ } -+ -+ @Override -+ public ItemStack set(int index, @NotNull ItemStack itemStack) { -+ ItemStack existing = this.items[index]; -+ -+ this.items[index] = itemStack; -+ -+ if (itemStack == ItemStack.EMPTY) { -+ this.bitSet &= ~(1L << index); -+ } else { -+ this.bitSet |= 1L << index; -+ } -+ -+ return existing; -+ } -+ -+ @NotNull -+ @Override -+ public ItemStack get(int var0) { -+ return this.items[var0]; -+ } -+ -+ @Override -+ public int size() { -+ return this.items.length; -+ } -+ -+ @Override -+ public void clear() { -+ Arrays.fill(this.items, ItemStack.EMPTY); -+ } -+ -+ // these are unsupported for block inventories which have a static size -+ @Override -+ public void add(int var0, ItemStack var1) { -+ throw new UnsupportedOperationException(); -+ } -+ -+ @Override -+ public ItemStack remove(int var0) { -+ throw new UnsupportedOperationException(); -+ } -+ -+ @Override -+ public String toString() { -+ return "ItemListWithBitset{" + -+ "items=" + Arrays.toString(items) + -+ ", bitSet=" + Long.toString(bitSet, 2) + -+ ", allBits=" + Long.toString(allBits, 2) + -+ ", size=" + this.items.length + -+ '}'; -+ } -+} -diff --git a/src/main/java/gg/airplane/structs/Long2FloatAgingCache.java b/src/main/java/gg/airplane/structs/Long2FloatAgingCache.java -new file mode 100644 -index 0000000000000000000000000000000000000000..a7f297ebb569f7c1f205e967ca485be70013a714 ---- /dev/null -+++ b/src/main/java/gg/airplane/structs/Long2FloatAgingCache.java -@@ -0,0 +1,119 @@ -+package gg.airplane.structs; -+ -+import it.unimi.dsi.fastutil.HashCommon; -+ -+/** -+ * A replacement for the cache used in Biome. -+ */ -+public class Long2FloatAgingCache { -+ -+ private static class AgingEntry { -+ private long data; -+ private float value; -+ private int uses = 0; -+ private int age = 0; -+ -+ private AgingEntry(long data, float value) { -+ this.data = data; -+ this.value = value; -+ } -+ -+ public void replace(long data, float flag) { -+ this.data = data; -+ this.value = flag; -+ } -+ -+ public int getValue() { -+ return this.uses - (this.age >> 1); // age isn't as important as uses -+ } -+ -+ public void incrementUses() { -+ this.uses = this.uses + 1 & Integer.MAX_VALUE; -+ } -+ -+ public void incrementAge() { -+ this.age = this.age + 1 & Integer.MAX_VALUE; -+ } -+ } -+ -+ private final AgingEntry[] entries; -+ private final int mask; -+ private final int maxDistance; // the most amount of entries to check for a value -+ -+ public Long2FloatAgingCache(int size) { -+ int arraySize = HashCommon.nextPowerOfTwo(size); -+ this.entries = new AgingEntry[arraySize]; -+ this.mask = arraySize - 1; -+ this.maxDistance = Math.min(arraySize, 4); -+ } -+ -+ public float getValue(long data) { -+ AgingEntry curr; -+ int pos; -+ -+ if ((curr = this.entries[pos = HashCommon.mix(HashCommon.long2int(data)) & this.mask]) == null) { -+ return Float.NaN; -+ } else if (data == curr.data) { -+ curr.incrementUses(); -+ return curr.value; -+ } -+ -+ int checked = 1; // start at 1 because we already checked the first spot above -+ -+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) { -+ if (data == curr.data) { -+ curr.incrementUses(); -+ return curr.value; -+ } else if (++checked >= this.maxDistance) { -+ break; -+ } -+ } -+ -+ return Float.NaN; -+ } -+ -+ public void putValue(long data, float value) { -+ AgingEntry curr; -+ int pos; -+ -+ if ((curr = this.entries[pos = HashCommon.mix(HashCommon.long2int(data)) & this.mask]) == null) { -+ this.entries[pos] = new AgingEntry(data, value); // add -+ return; -+ } else if (data == curr.data) { -+ curr.incrementUses(); -+ return; -+ } -+ -+ int checked = 1; // start at 1 because we already checked the first spot above -+ -+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) { -+ if (data == curr.data) { -+ curr.incrementUses(); -+ return; -+ } else if (++checked >= this.maxDistance) { -+ this.forceAdd(data, value); -+ return; -+ } -+ } -+ -+ this.entries[pos] = new AgingEntry(data, value); // add -+ } -+ -+ private void forceAdd(long data, float value) { -+ int expectedPos = HashCommon.mix(HashCommon.long2int(data)) & this.mask; -+ AgingEntry entryToRemove = this.entries[expectedPos]; -+ -+ for (int i = expectedPos + 1; i < expectedPos + this.maxDistance; i++) { -+ int pos = i & this.mask; -+ AgingEntry entry = this.entries[pos]; -+ if (entry.getValue() < entryToRemove.getValue()) { -+ entryToRemove = entry; -+ } -+ -+ entry.incrementAge(); // use this as a mechanism to age the other entries -+ } -+ -+ // remove the least used/oldest entry -+ entryToRemove.replace(data, value); -+ } -+} diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f74732f4ab6ea @@ -616,10 +340,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..6464682e2f93659e73aca491031c8051ab000033 +index 0000000000000000000000000000000000000000..11075b0b4d4c5591850704999868c678348170ff --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -@@ -0,0 +1,302 @@ +@@ -0,0 +1,299 @@ +package gg.pufferfish.pufferfish; + +import gg.pufferfish.pufferfish.simd.SIMDDetection; @@ -708,7 +432,7 @@ index 0000000000000000000000000000000000000000..6464682e2f93659e73aca491031c8051 + // Attempt to detect vectorization + try { + SIMDDetection.isEnabled = SIMDDetection.canEnable(PufferfishLogger.LOGGER); -+ SIMDDetection.versionLimited = SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18 && SIMDDetection.getJavaVersion() != 19; ++ SIMDDetection.versionLimited = SIMDDetection.getJavaVersion() < 17 || SIMDDetection.getJavaVersion() > 21; + } catch (NoClassDefFoundError | Exception ignored) { + ignored.printStackTrace(); + } @@ -716,7 +440,7 @@ index 0000000000000000000000000000000000000000..6464682e2f93659e73aca491031c8051 + if (SIMDDetection.isEnabled) { + PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions."); + } else if (SIMDDetection.versionLimited) { -+ PufferfishLogger.LOGGER.warning("Will not enable SIMD! These optimizations are only safely supported on Java 17, Java 18, and Java 19."); ++ PufferfishLogger.LOGGER.warning("Will not enable SIMD! These optimizations are only safely supported on Java 17-21."); + } else { + PufferfishLogger.LOGGER.warning("SIMD operations are available for your server, but are not configured!"); + PufferfishLogger.LOGGER.warning("To enable additional optimizations, add \"--add-modules=jdk.incubator.vector\" to your startup flags, BEFORE the \"-jar\"."); @@ -912,12 +636,9 @@ index 0000000000000000000000000000000000000000..6464682e2f93659e73aca491031c8051 + "the ender dragon whenever a player places an end crystal."); + } + -+ + public static boolean disableMethodProfiler; -+ public static boolean disableOutOfOrderChat; + private static void miscSettings() { -+ disableMethodProfiler = getBoolean("misc.disable-method-profiler", true); -+ disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", false); ++ disableMethodProfiler = getBoolean("misc.disable-method-profiler", true); + setComment("misc", "Settings for things that don't belong elsewhere"); + } + @@ -946,20 +667,24 @@ index 0000000000000000000000000000000000000000..53f2df00c6809618a9ee3d2ea72e85e8 +} diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java new file mode 100644 -index 0000000000000000000000000000000000000000..893d8c0946ef71a0561221dd76bffff0dc940d56 +index 0000000000000000000000000000000000000000..06323dcc745aed16123980fc559d7b65c42f1e1c --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java -@@ -0,0 +1,136 @@ +@@ -0,0 +1,132 @@ +package gg.pufferfish.pufferfish; + -+import static net.kyori.adventure.text.Component.text; -+import static net.kyori.adventure.text.format.NamedTextColor.GREEN; -+import static net.kyori.adventure.text.format.NamedTextColor.RED; -+ +import com.destroystokyo.paper.VersionHistoryManager; +import com.destroystokyo.paper.util.VersionFetcher; +import com.google.gson.Gson; +import com.google.gson.JsonObject; ++import io.papermc.paper.ServerBuildInfo; ++import net.kyori.adventure.text.Component; ++import net.kyori.adventure.text.JoinConfiguration; ++import net.kyori.adventure.text.format.NamedTextColor; ++import net.kyori.adventure.text.format.TextDecoration; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; @@ -969,21 +694,18 @@ index 0000000000000000000000000000000000000000..893d8c0946ef71a0561221dd76bffff0 +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.JoinConfiguration; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.kyori.adventure.text.format.TextDecoration; -+import org.bukkit.craftbukkit.CraftServer; -+import org.jetbrains.annotations.NotNull; -+import org.jetbrains.annotations.Nullable; ++ ++import static net.kyori.adventure.text.Component.text; ++import static net.kyori.adventure.text.format.NamedTextColor.GREEN; ++import static net.kyori.adventure.text.format.NamedTextColor.RED; + +public class PufferfishVersionFetcher implements VersionFetcher { + + private static final Logger LOGGER = Logger.getLogger("PufferfishVersionFetcher"); + private static final HttpClient client = HttpClient.newHttpClient(); + -+ private static final URI JENKINS_URI = URI.create("https://ci.pufferfish.host/job/Pufferfish-1.20/lastSuccessfulBuild/buildNumber"); -+ private static final String GITHUB_FORMAT = "https://api.github.com/repos/pufferfish-gg/Pufferfish/compare/ver/1.20...%s"; ++ private static final URI JENKINS_URI = URI.create("https://ci.pufferfish.host/job/Pufferfish-1.21/lastSuccessfulBuild/buildNumber"); ++ private static final String GITHUB_FORMAT = "https://api.github.com/repos/pufferfish-gg/Pufferfish/compare/ver/1.21...%s"; + + private static final HttpResponse.BodyHandler JSON_OBJECT_BODY_HANDLER = responseInfo -> HttpResponse.BodySubscribers + .mapping( @@ -998,21 +720,16 @@ index 0000000000000000000000000000000000000000..893d8c0946ef71a0561221dd76bffff0 + + @Override + public @NotNull Component getVersionMessage(final @NotNull String serverVersion) { -+ final String[] parts = CraftServer.class.getPackage().getImplementationVersion().split("-"); + @NotNull Component component; -+ -+ if (parts.length != 3) { -+ component = text("Unknown server version.", RED); ++ ++ if (ServerBuildInfo.buildInfo().buildNumber().isPresent()) { ++ component = this.fetchJenkinsVersion(ServerBuildInfo.buildInfo().buildNumber().getAsInt()); ++ } else if (ServerBuildInfo.buildInfo().gitCommit().isPresent()) { ++ component = this.fetchGithubVersion(ServerBuildInfo.buildInfo().gitCommit().get()); + } else { -+ final String versionString = parts[2]; -+ -+ try { -+ component = this.fetchJenkinsVersion(Integer.parseInt(versionString)); -+ } catch (NumberFormatException e) { -+ component = this.fetchGithubVersion(versionString.substring(1, versionString.length() - 1)); -+ } ++ component = text("Unknown server version.", RED); + } -+ ++ + final @Nullable Component history = this.getHistory(); + return history != null ? Component + .join(JoinConfiguration.noSeparators(), component, Component.newline(), this.getHistory()) : component; @@ -1066,8 +783,8 @@ index 0000000000000000000000000000000000000000..893d8c0946ef71a0561221dd76bffff0 + return switch (Math.max(-1, Math.min(1, versionDiff))) { + case -1 -> text("You are running an unsupported version of Pufferfish.", RED); + case 0 -> text("You are on the latest version!", GREEN); -+ default -> text("You are running " + versionDiff + " version" + (versionDiff == 1 ? "" : "s") + " beyond. " + -+ "Please update your server when possible to maintain stability, security, and receive the latest optimizations.", ++ default -> text("You are running " + versionDiff + " version" + (versionDiff == 1 ? "" : "s") + " behind. " + ++ "Please update your server when possible to maintain stability and security, and to receive the latest optimizations.", + RED); + }; + } @@ -1353,43 +1070,6 @@ index 0000000000000000000000000000000000000000..8e5323d5d9af25c8a85c4b34a6be76cf + } + +} -diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java -new file mode 100644 -index 0000000000000000000000000000000000000000..fdcb62d12164024a5f354d60cc863821a18d1b2a ---- /dev/null -+++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java -@@ -0,0 +1,31 @@ -+package gg.pufferfish.pufferfish.util; -+ -+import com.destroystokyo.paper.util.misc.PlayerAreaMap; -+import com.destroystokyo.paper.util.misc.PooledLinkedHashSets; -+import java.util.concurrent.ConcurrentHashMap; -+import net.minecraft.server.level.ServerPlayer; -+ -+public final class AsyncPlayerAreaMap extends PlayerAreaMap { -+ -+ public AsyncPlayerAreaMap() { -+ super(); -+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); -+ } -+ -+ public AsyncPlayerAreaMap(final PooledLinkedHashSets pooledHashSets) { -+ super(pooledHashSets); -+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); -+ } -+ -+ public AsyncPlayerAreaMap(final PooledLinkedHashSets pooledHashSets, final ChangeCallback addCallback, -+ final ChangeCallback removeCallback) { -+ this(pooledHashSets, addCallback, removeCallback, null); -+ } -+ -+ public AsyncPlayerAreaMap(final PooledLinkedHashSets pooledHashSets, final ChangeCallback addCallback, -+ final ChangeCallback removeCallback, final ChangeSourceCallback changeSourceCallback) { -+ super(pooledHashSets, addCallback, removeCallback, changeSourceCallback); -+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); -+ } -+ -+} diff --git a/src/main/java/gg/pufferfish/pufferfish/util/IterableWrapper.java b/src/main/java/gg/pufferfish/pufferfish/util/IterableWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..c1929840254a3e6d721816f4a20415bea1742580 @@ -1462,37 +1142,11 @@ index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f549 + return backingMap.size(); + } +} -diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java -index e028353e0261310afc42ca0454b723d9f1ffc131..2222625a515d9ae6c3e9c92fc4d4a5bf974af5f8 100644 ---- a/src/main/java/io/papermc/paper/util/MCUtil.java -+++ b/src/main/java/io/papermc/paper/util/MCUtil.java -@@ -215,7 +215,7 @@ public final class MCUtil { - } - - public static long getCoordinateKey(final Entity entity) { -- return ((long)(MCUtil.fastFloor(entity.getZ()) >> 4) << 32) | ((MCUtil.fastFloor(entity.getX()) >> 4) & 0xFFFFFFFFL); -+ return ((long)(entity.blockPosition.getZ() >> 4) << 32) | ((entity.blockPosition.getX() >> 4) & 0xFFFFFFFFL); // Pufferfish - eliminate double->long cast in hotpath - } - - 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 0af9ed92824ccf30814eceb6a2c2e5c12661c991..67eeb39aede6908d2756e49821ca350ebe916902 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 (!gg.pufferfish.pufferfish.PufferfishConfig.disableOutOfOrderChat && body.timeStamp().isBefore(this.lastTimeStamp)) { // Pufferfish - 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 2dc07e5ef249636e85ad9c78e3729e9e066a8fe8..b9e0a32f5829ca15f949effcafcbe2a975f6f690 100644 +index 23ddd26af762c1cd7fb3920669abb96b3213ab37..30907b63234642a4e760ae865c4a91e3162e52f2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -312,6 +312,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); -@@ -1229,6 +1230,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper - } - - public SystemReport fillSystemReport(SystemReport details) { -@@ -2452,6 +2459,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop needsChangeBroadcasting = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); -- public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets); -+ public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap = new gg.pufferfish.pufferfish.util.AsyncPlayerAreaMap(this.pooledLinkedPlayerHashSets); // Pufferfish - // Paper end - optimise chunk tick iteration ++ // Paper start - optimise chunk tick iteration ++// public final it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet needsChangeBroadcasting = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); ++// public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap = new gg.pufferfish.pufferfish.util.AsyncPlayerAreaMap(this.pooledLinkedPlayerHashSets); // Pufferfish ++ // Paper end - optimise chunk tick iteration public ChunkMap(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor executor, BlockableEventLoop mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory, int viewDistance, boolean dsync) { -@@ -1448,8 +1448,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + super(new RegionStorageInfo(session.getLevelId(), world.dimension(), "chunk"), session.getDimensionPath(world.dimension()).resolve("region"), dataFixer, dsync); +@@ -1281,8 +1285,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance); } @@ -1593,7 +1240,7 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..1081e9df44bb24b2c51ebd9364c21c7b Iterator iterator = this.entity.getIndirectPassengers().iterator(); while (iterator.hasNext()) { -@@ -1461,6 +1481,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1294,6 +1318,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider i = j; } } @@ -1604,12 +1251,12 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..1081e9df44bb24b2c51ebd9364c21c7b 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 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe3c2a719d 100644 +index dcb5651d1d9b10b40430fb2f713beedf68336704..dbc62bf37a9e6e1936558338521938a47a51e2d6 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -77,6 +77,9 @@ public class ServerChunkCache extends ChunkSource { - private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; - // Paper end +@@ -128,6 +128,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + // Paper end - rewrite chunk system + private ServerChunkCache.ChunkAndHolder[] iterationCopy; // Paper - chunk tick iteration optimisations + public boolean firstRunSpawnCounts = true; // Pufferfish + public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs @@ -1617,15 +1264,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe 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); -@@ -513,6 +516,7 @@ public class ServerChunkCache extends ChunkSource { - - // Paper - optimise chunk tick iteration - -+ this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random - if (this.level.getServer().tickRateManager().runsNormally()) { - gameprofilerfiller.popPush("naturalSpawnCount"); - this.level.timings.countNaturalMobs.startTiming(); // Paper - timings -@@ -521,6 +525,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -461,6 +464,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon 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 @@ -1633,7 +1272,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe // re-set mob counts for (ServerPlayer player : this.level.players) { // Paper start - per player mob spawning backoff -@@ -535,14 +540,18 @@ public class ServerChunkCache extends ChunkSource { +@@ -475,14 +479,18 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - per player mob spawning backoff } @@ -1655,18 +1294,18 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe gameprofilerfiller.popPush("spawnAndTick"); boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit -@@ -632,8 +641,8 @@ public class ServerChunkCache extends ChunkSource { - if (tick && chunk1.chunkStatus.isOrAfter(net.minecraft.server.level.FullChunkStatus.ENTITY_TICKING)) { - // Paper end - optimise chunk tick iteration +@@ -507,8 +515,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + + if (true && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair)) { // Paper - rewrite chunk system chunk1.incrementInhabitedTime(j); -- if (spawn && flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration +- if (flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot - NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); -+ if (spawn && flag && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || _pufferfish_spawnCountsReady.get()) && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration // Pufferfish ++ if (flag && (this.spawnEnemies || this.spawnFriendlies) && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || _pufferfish_spawnCountsReady.get()) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot + NaturalSpawner.spawnForChunk(this.level, chunk1, lastSpawnState, this.spawnFriendlies, this.spawnEnemies, flag1); // Pufferfish } - if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - optimise chunk tick iteration -@@ -680,6 +689,40 @@ public class ServerChunkCache extends ChunkSource { + if (true) { // Paper - rewrite chunk system +@@ -552,6 +560,40 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon gameprofilerfiller.pop(); gameprofilerfiller.pop(); } @@ -1693,8 +1332,8 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe + if (_pufferfish_spawnCountsReady.getAndSet(false)) { + net.minecraft.server.MinecraftServer.getServer().mobSpawnExecutor.submit(() -> { + int mapped = distanceManager.getNaturalSpawnChunkCount(); -+ io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet.Iterator objectiterator = -+ level.entityTickList.entities.iterator(io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet.ITERATOR_FLAG_SEE_ADDITIONS); ++ ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet.Iterator objectiterator = ++ level.entityTickList.entities.iterator(ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet.ITERATOR_FLAG_SEE_ADDITIONS); + gg.pufferfish.pufferfish.util.IterableWrapper wrappedIterator = + new gg.pufferfish.pufferfish.util.IterableWrapper<>(objectiterator); + lastSpawnState = NaturalSpawner.createState(mapped, wrappedIterator, this::getFullChunk, null, true); @@ -1708,32 +1347,30 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe 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 529ab44baaf573b97cf7e89560c548642733188f..db55ad9aaabfa1ea998754f3ac352d1698936696 100644 +index 8ea2f24695f5dad55e21f238b69442513e7a90c6..5a2f7f7cf79dcbb996574e18cad86ebb54bd718e 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -183,7 +183,8 @@ public class ServerEntity { - long i1 = this.positionCodec.encodeZ(vec3d); - boolean flag6 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L; +@@ -193,6 +193,7 @@ public class ServerEntity { + boolean flag6 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L; -- if (!flag6 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.onGround()&& !(io.papermc.paper.configuration.GlobalConfiguration.get().collisions.sendFullPosForHardCollidingEntities && this.entity.hardCollides())) { // Paper - send full pos for hard colliding entities to prevent collision problems due to desync -+ if (!flag6 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.onGround() && !(io.papermc.paper.configuration.GlobalConfiguration.get().collisions.sendFullPosForHardCollidingEntities && this.entity.hardCollides())) { // Paper - send full pos for hard colliding entities to prevent collision problems due to desync -+ if (flag2 || flag3 || this.entity instanceof AbstractArrow) { // Pufferfish - if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) { - if (flag2) { - packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround()); -@@ -197,6 +198,7 @@ public class ServerEntity { - flag4 = true; - flag5 = true; - } -+ } // Pufferfish - } else { - this.wasOnGround = this.entity.onGround(); - this.teleportDelay = 0; + if (!this.forceStateResync && !flag6 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.onGround()) { // Paper - fix desync when a player is added to the tracker ++ if (flag2 || flag3 || this.entity instanceof AbstractArrow) { // Pufferfish + if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) { + if (flag2) { + packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround()); +@@ -206,6 +207,7 @@ public class ServerEntity { + flag4 = true; + flag5 = true; + } ++ } // Pufferfish + } else { + 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 502bdc726b7890b00ee36871d905dea44e8719e3..fbffe3dab1b7812b50df5d6bddf4fbdb2e583339 100644 +index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..5a9712de8abe3c3ccd08c5699f89e3ce54b1f28d 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -894,6 +894,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -715,6 +715,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. org.spigotmc.ActivationRange.activateEntities(this); // Spigot this.timings.entityTick.startTiming(); // Spigot this.entityTickList.forEach((entity) -> { @@ -1741,7 +1378,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..fbffe3dab1b7812b50df5d6bddf4fbdb if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); -@@ -913,7 +914,20 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -734,7 +735,20 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } gameprofilerfiller.push("tick"); @@ -1749,7 +1386,6 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..fbffe3dab1b7812b50df5d6bddf4fbdb + // Pufferfish start - copied from this.guardEntityTick + try { + this.tickNonPassenger(entity); // Pufferfish - changed -+ MinecraftServer.getServer().executeMidTickTasks(); // Tuinity - execute chunk tasks mid tick + } catch (Throwable throwable) { + if (throwable instanceof ThreadDeath) throw throwable; // Paper + // Paper start - Prevent tile entity and entity crashes @@ -1759,170 +1395,40 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..fbffe3dab1b7812b50df5d6bddf4fbdb + entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + // Paper end + } ++ this.moonrise$midTickTasks(); // Paper - rewrite chunk system + // Pufferfish end gameprofilerfiller.pop(); } } -@@ -978,9 +992,11 @@ public class ServerLevel extends Level implements WorldGenLevel { - } - // Paper start - optimise random block ticking - private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); -- private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); -+ // private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(); // Pufferfish - moved to super - // Paper end - -+ private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish -+ - public void tickChunk(LevelChunk chunk, int randomTickSpeed) { - ChunkPos chunkcoordintpair = chunk.getPos(); - boolean flag = this.isRaining(); -@@ -991,7 +1007,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -861,9 +875,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. + int j = chunkcoordintpair.getMinBlockX(); + int k = chunkcoordintpair.getMinBlockZ(); + ProfilerFiller gameprofilerfiller = this.getProfiler(); +- 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 - Option to 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 - Option to disable thunder // Pufferfish - replace random with shouldDoLightning - blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper + BlockPos blockposition = this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15)); if (this.isRainingAt(blockposition)) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index fe2ef36ab5dc4b933abf24dbfd0e811c53239cf0..e725c1c0496383007ffb94c46fc18340666b5e29 100644 +index 60ff21c8df4168f14da04a12073bde47cd4693c4..301dc8ea0574f02f28067cda397683c7e7a6152f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1135,6 +1135,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1123,6 +1123,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { + if (!gg.pufferfish.pufferfish.PufferfishConfig.enableBooks && !this.player.getBukkitEntity().hasPermission("pufferfish.usebooks")) return; // Pufferfish // Paper start - 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 ---- 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 { - this.container2 = second; - } - -+ // Pufferfish start -+ @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return this.container1.hasEmptySlot(null) || this.container2.hasEmptySlot(null); -+ } -+ -+ @Override -+ public boolean isCompletelyFull(Direction enumdirection) { -+ return this.container1.isCompletelyFull(null) && this.container2.isCompletelyFull(null); -+ } -+ -+ @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { -+ return this.container1.isCompletelyEmpty(null) && this.container2.isCompletelyEmpty(null); -+ } -+ // Pufferfish end -+ - @Override - public int getContainerSize() { - return this.container1.getContainerSize() + this.container2.getContainerSize(); -diff --git a/src/main/java/net/minecraft/world/Container.java b/src/main/java/net/minecraft/world/Container.java -index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4cf6aef28f 100644 ---- a/src/main/java/net/minecraft/world/Container.java -+++ b/src/main/java/net/minecraft/world/Container.java -@@ -3,6 +3,8 @@ package net.minecraft.world; - import java.util.Set; - import java.util.function.Predicate; - import net.minecraft.core.BlockPos; -+ -+import net.minecraft.core.Direction; // Pufferfish - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.item.Item; - import net.minecraft.world.item.ItemStack; -@@ -14,6 +16,63 @@ import org.bukkit.craftbukkit.entity.CraftHumanEntity; - // CraftBukkit end - - public interface Container extends Clearable { -+ // Pufferfish start - allow the inventory to override and optimize these frequent calls -+ default boolean hasEmptySlot(@org.jetbrains.annotations.Nullable Direction enumdirection) { // there is a slot with 0 items in it -+ if (this instanceof WorldlyContainer worldlyContainer) { -+ for (int i : worldlyContainer.getSlotsForFace(enumdirection)) { -+ if (this.getItem(i).isEmpty()) { -+ return true; -+ } -+ } -+ } else { -+ int size = this.getContainerSize(); -+ for (int i = 0; i < size; i++) { -+ if (this.getItem(i).isEmpty()) { -+ return true; -+ } -+ } -+ } -+ return false; -+ } -+ -+ default boolean isCompletelyFull(@org.jetbrains.annotations.Nullable Direction enumdirection) { // every stack is maxed -+ if (this instanceof WorldlyContainer worldlyContainer) { -+ for (int i : worldlyContainer.getSlotsForFace(enumdirection)) { -+ ItemStack itemStack = this.getItem(i); -+ if (itemStack.getCount() < itemStack.getMaxStackSize()) { -+ return false; -+ } -+ } -+ } else { -+ int size = this.getContainerSize(); -+ for (int i = 0; i < size; i++) { -+ ItemStack itemStack = this.getItem(i); -+ if (itemStack.getCount() < itemStack.getMaxStackSize()) { -+ return false; -+ } -+ } -+ } -+ return true; -+ } -+ -+ default boolean isCompletelyEmpty(@org.jetbrains.annotations.Nullable Direction enumdirection) { -+ if (this instanceof WorldlyContainer worldlyContainer) { -+ for (int i : worldlyContainer.getSlotsForFace(enumdirection)) { -+ if (!this.getItem(i).isEmpty()) { -+ return false; -+ } -+ } -+ } else { -+ int size = this.getContainerSize(); -+ for (int i = 0; i < size; i++) { -+ if (!this.getItem(i).isEmpty()) { -+ return false; -+ } -+ } -+ } -+ return true; -+ } -+ // Pufferfish end - - int LARGE_MAX_STACK_SIZE = 64; - int DEFAULT_DISTANCE_LIMIT = 8; + List pageList = packet.pages(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4f3a47176 100644 +index 490ee48346395fcbaf2eb0151e9248f18974fea6..3f7812c55dae82433336d6e091aa83434615fa04 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 - public double yo; - public double zo; - private Vec3 position; -- private BlockPos blockPosition; -+ public BlockPos blockPosition; // Pufferfish - private->public - private ChunkPos chunkPosition; - private Vec3 deltaMovement; - private float yRot; -@@ -424,6 +424,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -429,6 +429,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API @@ -1932,7 +1438,7 @@ index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -820,6 +823,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -845,6 +848,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public void tick() { @@ -1945,7 +1451,7 @@ index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4 this.baseTick(); } -@@ -4421,16 +4430,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4448,16 +4457,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -1971,7 +1477,7 @@ index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4438,14 +4449,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4465,14 +4476,61 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -1981,8 +1487,8 @@ index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4 - blockposition_mutableblockposition.set(l1, i2, j2); - FluidState fluid = this.level().getFluidState(blockposition_mutableblockposition); + // Pufferfish start - based off CollisionUtil.getCollisionsForBlocksOrWorldBorder -+ final int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this.level()); -+ final int maxSection = io.papermc.paper.util.WorldUtil.getMaxSection(this.level()); ++ final int minSection = ca.spottedleaf.moonrise.common.util.WorldUtil.getMinSection(this.level()); ++ final int maxSection = ca.spottedleaf.moonrise.common.util.WorldUtil.getMaxSection(this.level()); + final int minBlock = minSection << 4; + final int maxBlock = (maxSection << 4) | 15; + @@ -2039,7 +1545,7 @@ index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4 if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4467,9 +4525,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4494,9 +4552,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end } } @@ -2053,10 +1559,10 @@ index 637478fd8a284e6833cf8f5fa17ccf9d73d1dd3f..1aa45e64e49ea011c2ba5e943b4e72c4 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 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..dc11683ee4d8a6b7a1c42bcae36dc6e8105cd994 100644 +index cb61462d4691a055a4b25f7b953609d8a154fdfe..f9440014ab2fe753c16b9383f5fffbb8adb76e79 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -305,6 +305,8 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -316,6 +316,8 @@ public class EntityType implements FeatureElement, EntityTypeT private final boolean canSpawnFarFromPlayer; private final int clientTrackingRange; private final int updateInterval; @@ -2066,10 +1572,10 @@ index 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..dc11683ee4d8a6b7a1c42bcae36dc6e8 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e9bb7feb591032904516d1b9374f486d8a7d066c..366121188c5abb550ed0a5f99d25c001628685bb 100644 +index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..ce0d28cafcae0b7edc861749a1652ecc08d298b5 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; +@@ -157,7 +157,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; // CraftBukkit end @@ -2077,7 +1583,7 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..366121188c5abb550ed0a5f99d25c001 public abstract class LivingEntity extends Entity implements Attackable { -@@ -414,7 +413,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -449,7 +448,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this instanceof net.minecraft.world.entity.player.Player; if (!this.level().isClientSide) { @@ -2086,7 +1592,7 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..366121188c5abb550ed0a5f99d25c001 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(); -@@ -1418,6 +1417,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1409,6 +1408,19 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.getHealth() <= 0.0F; } @@ -2106,7 +1612,7 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..366121188c5abb550ed0a5f99d25c001 @Override public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { -@@ -2024,6 +2036,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2065,6 +2077,20 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.lastClimbablePos; } @@ -2128,10 +1634,10 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..366121188c5abb550ed0a5f99d25c001 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 d2c92df28475f0a32a0134324eb0a5609a9afb99..a6b48b4eab6e0e98205fd9cafc3cde5ad39651af 100644 +index bd7c6ce15698aed70376c109ba36f52d6794a2f8..7c207bd1da82255bf504f9212c08201fe9389f1a 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -222,14 +222,16 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -232,14 +232,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return this.lookControl; } @@ -2150,36 +1656,36 @@ index d2c92df28475f0a32a0134324eb0a5609a9afb99..a6b48b4eab6e0e98205fd9cafc3cde5a this.targetSelector.tick(); } } -@@ -913,16 +915,20 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -925,16 +927,20 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab 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/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index b99a080ab27e24d8131fda931ca70d6d271bb01c..8d6954d05d2bf6d6c1c4953db3127b011a858cec 100644 +index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..2c9aab24b51d2f0a50100089fe72093b501d383a 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(); + private final Set attributesToSync = new ObjectOpenHashSet<>(); + private final Set attributesToUpdate = 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; @@ -2187,18 +1693,18 @@ 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()); +@@ -47,9 +49,10 @@ public class AttributeMap { + return this.attributes.values().stream().filter(attribute -> attribute.getAttribute().value().isClientSyncable()).collect(Collectors.toList()); } + @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) { diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java index 758f62416ca9c02351348ac0d41deeb4624abc0e..69130969c9a434ec2361e573c9a1ec9f462dfda2 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java @@ -2217,20 +1723,20 @@ index 758f62416ca9c02351348ac0d41deeb4624abc0e..69130969c9a434ec2361e573c9a1ec9f } } 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..d78e1f6191738d426968efc24e734f04b0fc7edb 100644 +index 9bdbf3e9453bc3ce96d52d04b8cde0d05f7356d8..e32c3120f9c5ddf429d8428c370ff61320a38de6 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,12 @@ public class GoalSelector { } // Paper start - public boolean inactiveTick() { + public boolean inactiveTick(int tickRate, boolean inactive) { // Pufferfish start + if (inactive && !gg.pufferfish.pufferfish.PufferfishConfig.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 % tickRate == 0; // TODO newGoalRate was already unused in 1.20.4, check if this is correct + // Pufferfish end } public boolean hasTasks() { @@ -2248,7 +1754,7 @@ index aee0147649d458b87d92496eda0c1723ebe570d2..89e9ea999d2fbd81a1d74382ef3fcd67 this.blockPos = mutableBlockPos; 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 d2f0c3b26d4beedb49d86e0242d843590d469d02..28cff997a1b263784e245f692adbff2a888a2d53 100644 +index aecb0ad814586bfc5e56755ee14379a69388b38c..00ef7f6d60bcaee2506cf111461f2c2f8eedd59a 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 @@ -76,9 +76,18 @@ public class TargetingConditions { @@ -2273,10 +1779,10 @@ index d2f0c3b26d4beedb49d86e0242d843590d469d02..28cff997a1b263784e245f692adbff2a 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 44fa2d4f90389f5526746bd94a2450c03340bd0b..4fba7c2f6ec363846a772ef2a63e9b3fc1037de5 100644 +index dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..e44af851263f27aa0009b14a60bb2d0642a5ce74 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 { +@@ -239,13 +239,22 @@ public class Bat extends AmbientCreature { } } @@ -2298,13 +1804,13 @@ index 44fa2d4f90389f5526746bd94a2450c03340bd0b..4fba7c2f6ec363846a772ef2a63e9b3f } + // Pufferfish end - @Override - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { + private void setupAnimationStates() { + if (this.isResting()) { 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 69986f75d3cf729204cca0c7e5428536af31f695..98a759dbe46e2ead39af0f340c9b73c8f4ddce1e 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 +@@ -217,9 +217,11 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS return 0.4F; } @@ -2317,10 +1823,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 01a0731e92d39c8718538244e34a271fb8717fc2..44937570f8e968ba4fe2822f69ca8f09679da89d 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 @@ -2349,10 +1855,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 43046f4a0cff620834ac4647efdcde227185b2ff..90393485ebcf8a4c8c74802fff942b1af8cfbf00 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; } @@ -2365,10 +1871,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 376bcbc189008464f4d518c1e07643431ba96306..07bdea8a7d6706839a758afe0242202c7e841416 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 } @@ -2381,10 +1887,10 @@ index 5d247ac38fe8a61603b3d934f3000bcda773142b..2e4177cfb02616ef6fa689f6d378976e this.level().getProfiler().pop(); this.level().getProfiler().push("goatActivityUpdate"); 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 d3b4d492aee380dc17f4232d90eaae4f07bb9f86..82921c56c49edb0ca07425da563aa4876d4e6fb1 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()); } @@ -2399,10 +1905,10 @@ index 12440ee2dccc0a697fb403765f2e1b987ccc0283..de2471cfa96a23944f229f33ffdff88b protected SoundEvent getAmbientSound() { return SoundEvents.WITHER_AMBIENT; 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 828c51477cd8f35d591367b30bf4feef6a250292..ace4959f818bf56882b290d109b8b97f2c145631 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 { +@@ -320,11 +320,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); @@ -2423,10 +1929,10 @@ index f33c03e81b7ff643741f56eea055e6af260de618..6563e625ebae47fc68e5010d36bd4b4d boolean flag1 = iblockdata.getFluidState().is(FluidTags.WATER); 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 d5e0c493f4c348724958193795ceb987765a465f..7de73564bc73d6504e18977e97a2ef5f46189e15 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(); } @@ -2439,10 +1945,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 bc58323801ee16fe9b63c21332144ec002a902f2..b2ae7088f90bf3cd04a59c6ddfdba60c58c6e1c8 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 +@@ -293,9 +293,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return !this.cannotHunt; } @@ -2455,10 +1961,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 38bf417a9ad4647f4af24d969f3bf4fed9c4bad7..40bbd80b1ed4afede6f0769e7f3fcfc61200452f 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 { +@@ -272,11 +272,13 @@ public class Warden extends Monster implements VibrationSystem { } @@ -2473,7 +1979,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 24044795d8e0f1fb15a4f2f5401f44897092f2a3..96ca567af2d8fb2ba39f995be80b935344550124 100644 +index 7e1871401ec5e3e9a85232053490259f132aec0a..a16d9c1661690de0374a4a3c31b119293d8fa52b 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 @@ -2507,10 +2013,10 @@ index 24044795d8e0f1fb15a4f2f5401f44897092f2a3..96ca567af2d8fb2ba39f995be80b9353 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 96c898086f35fd83f9b1ce7e3fe53d31b2fa4c31..c6a925cbd35eb33b27b90bfa8344ac7515d28b76 100644 +index 6e66141dca61f777b354854b5d0bac2570b8bf3b..abf231e6099cda766d73e67f31234e9f4cbc9545 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 { +@@ -643,6 +643,8 @@ public class Inventory implements Container, Nameable { } public boolean contains(ItemStack stack) { @@ -2519,7 +2025,7 @@ index 96c898086f35fd83f9b1ce7e3fe53d31b2fa4c31..c6a925cbd35eb33b27b90bfa8344ac75 Iterator iterator = this.compartments.iterator(); while (iterator.hasNext()) { -@@ -701,6 +703,18 @@ public class Inventory implements Container, Nameable { +@@ -657,6 +659,18 @@ public class Inventory implements Container, Nameable { } } } @@ -2529,7 +2035,7 @@ index 96c898086f35fd83f9b1ce7e3fe53d31b2fa4c31..c6a925cbd35eb33b27b90bfa8344ac75 + for (int j = 0; j < list.size(); j++) { + ItemStack itemstack1 = list.get(j); + -+ if (!itemstack1.isEmpty() && ItemStack.isSameItemSameTags(itemstack1, stack)) { ++ if (!itemstack1.isEmpty() && ItemStack.isSameItemSameComponents(itemstack1, stack)) { + return true; + } + } @@ -2539,10 +2045,10 @@ index 96c898086f35fd83f9b1ce7e3fe53d31b2fa4c31..c6a925cbd35eb33b27b90bfa8344ac75 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 156809090f1f83ad68e7e2477a3cfddac5757a8e..837f68825f601971f374be47952b23108bf66ba6 100644 +index de64de5d1328d3e0826c9990eb7c7eca5088cb9c..245d3d1630a11b3527f20f1135ce29cfe22ff347 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 { +@@ -52,6 +52,36 @@ public abstract class Projectile extends Entity implements TraceableEntity { super(type, world); } @@ -2561,7 +2067,7 @@ index 156809090f1f83ad68e7e2477a3cfddac5757a8e..837f68825f601971f374be47952b2310 + int previousX = Mth.floor(this.getX()) >> 4, previousZ = Mth.floor(this.getZ()) >> 4; + int newX = Mth.floor(x) >> 4, newZ = Mth.floor(z) >> 4; + if (previousX != newX || previousZ != newZ) { -+ boolean isLoaded = ((net.minecraft.server.level.ServerChunkCache) this.level().getChunkSource()).getChunkAtIfLoadedMainThread(newX, newZ) != null; ++ boolean isLoaded = ((net.minecraft.server.level.ServerChunkCache) this.level().getChunkSource()).getChunkAtIfLoadedImmediately(newX, newZ) != null; + if (!isLoaded) { + if (Projectile.loadedThisTick > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerTick) { + if (++this.loadedLifetime > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerProjectile) { @@ -2579,59 +2085,12 @@ index 156809090f1f83ad68e7e2477a3cfddac5757a8e..837f68825f601971f374be47952b2310 public void setOwner(@Nullable Entity entity) { if (entity != null) { this.ownerUUID = entity.getUUID(); -diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -index 756d0434472921992c9d84597d7c9c824e93614c..38c573d440946ca7ee6016ef92e9c1605031e611 100644 ---- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -@@ -28,7 +28,10 @@ import org.bukkit.inventory.InventoryHolder; - - public abstract class AbstractMinecartContainer extends AbstractMinecart implements ContainerEntity { - -+ // Pufferfish start - private NonNullList itemStacks; -+ private gg.airplane.structs.ItemListWithBitset itemStacksOptimized; -+ // Pufferfish end - @Nullable - public ResourceLocation lootTable; - public long lootTableSeed; -@@ -90,12 +93,18 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme - - protected AbstractMinecartContainer(EntityType type, Level world) { - super(type, world); -- this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); // CraftBukkit - SPIGOT-3513 -+ // Pufferfish start -+ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 -+ this.itemStacks = this.itemStacksOptimized.nonNullList; -+ // Pufferfish end - } - - protected AbstractMinecartContainer(EntityType type, double x, double y, double z, Level world) { - super(type, world, x, y, z); -- this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); // CraftBukkit - SPIGOT-3513 -+ // Pufferfish start -+ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 -+ this.itemStacks = this.itemStacksOptimized.nonNullList; -+ // Pufferfish end - } - - @Override -@@ -164,6 +173,10 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme - protected void readAdditionalSaveData(CompoundTag nbt) { - super.readAdditionalSaveData(nbt); - this.lootableData.loadNbt(nbt); // Paper -+ // Pufferfish start -+ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); -+ this.itemStacks = this.itemStacksOptimized.nonNullList; -+ // Pufferfish end - this.readChestVehicleSaveData(nbt); - } - diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java -index e1696f6b77df4c8fceaece64701d4db78b0a4c42..faa3f62d22266a3c32d6c95c3ffebd4aa3880739 100644 +index 5f51e64cb0611a4ba6bdcdcacbcba1063a7f3a5c..cc1e5882bee94864ad189d7f01ce78223411e51d 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 { - world.gameEvent((Entity) context.getPlayer(), GameEvent.ENTITY_PLACE, blockposition1); +@@ -57,7 +57,7 @@ public class EndCrystalItem extends Item { + world.gameEvent((Entity) context.getPlayer(), (Holder) GameEvent.ENTITY_PLACE, blockposition1); EndDragonFight enderdragonbattle = ((ServerLevel) world).getDragonFight(); - if (enderdragonbattle != null) { @@ -2640,10 +2099,18 @@ index e1696f6b77df4c8fceaece64701d4db78b0a4c42..faa3f62d22266a3c32d6c95c3ffebd4a } } 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..a097cfc528f709c80575f35483b6878314ea2717 100644 +index 213ee4aa988dd4c2a5a7be99b1d13f67338e5209..8e46753af60aa9fd8e4b4c0f955f7a55a77de314 100644 --- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java +++ b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java -@@ -26,8 +26,13 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo +@@ -10,6 +10,7 @@ import net.minecraft.core.HolderLookup; + import net.minecraft.core.NonNullList; + import net.minecraft.network.RegistryFriendlyByteBuf; + import net.minecraft.network.codec.StreamCodec; ++import net.minecraft.world.inventory.CraftingContainer; + import net.minecraft.world.item.ItemStack; + import net.minecraft.world.level.Level; + // CraftBukkit start +@@ -25,8 +26,13 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo final CraftingBookCategory category; final ItemStack result; final NonNullList ingredients; @@ -2657,16 +2124,16 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..a097cfc528f709c80575f35483b68783 this.group = group; this.category = category; this.result = result; -@@ -77,6 +82,28 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo +@@ -76,6 +82,28 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo } - public boolean matches(CraftingContainer inventory, Level world) { + public boolean matches(CraftingInput input, Level world) { + // Pufferfish start + if (!this.isBukkit) { + java.util.List ingredients = com.google.common.collect.Lists.newArrayList(this.ingredients.toArray(new Ingredient[0])); + -+ inventory: for (int index = 0; index < inventory.getContainerSize(); index++) { -+ ItemStack itemStack = inventory.getItem(index); ++ inventory: for (int index = 0; index < input.size(); index++) { ++ ItemStack itemStack = input.getItem(index); + + if (!itemStack.isEmpty()) { + for (int i = 0; i < ingredients.size(); i++) { @@ -2683,26 +2150,17 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..a097cfc528f709c80575f35483b68783 + } + // Pufferfish end + - StackedContents autorecipestackmanager = new StackedContents(); - autorecipestackmanager.initialize(this); // Paper - better exact choice recipes - int i = 0; + // Paper start - unwrap ternary & better exact choice recipes + if (input.ingredientCount() != this.ingredients.size()) { + return false; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ca89d1593bf1b46c79a882db528cbca1359dc9d4..a82de7111915b19cdc3f065910465a5e7e843aff 100644 +index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..d3cc65612c44f42ecae2e09b942438a03bc244bd 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -215,6 +215,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Paper end - - 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 - - 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 -@@ -1317,13 +1319,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1418,16 +1418,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl + public void guardEntityTick(Consumer tickConsumer, T entity) { 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 @@ -2714,8 +2172,12 @@ index ca89d1593bf1b46c79a882db528cbca1359dc9d4..a82de7111915b19cdc3f065910465a5e + entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Pufferfish - diff on change ServerLevel.tick // Paper end - Prevent block entity and entity crashes } +- this.moonrise$midTickTasks(); // Paper - rewrite chunk system ++ this.moonrise$midTickTasks(); // Paper - rewrite chunk system // Pufferfish - diff on change ServerLevel.tick } -@@ -1797,6 +1799,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Paper start - Option to prevent armor stands from doing entity lookups + @Override +@@ -1944,6 +1944,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl } public ProfilerFiller getProfiler() { @@ -2723,273 +2185,13 @@ index ca89d1593bf1b46c79a882db528cbca1359dc9d4..a82de7111915b19cdc3f065910465a5e 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 da7489986848316fed029b71d1bc4e1248c9c9a8..661acdf4b1f33d150b0caf179e925d3162d7be35 100644 ---- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java -+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -@@ -425,12 +425,12 @@ public final class NaturalSpawner { - } - } - -- private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) { -+ private static BlockPos getRandomPosWithin(ServerLevel world, LevelChunk chunk) { // Pufferfish - accept serverlevel - ChunkPos chunkcoordintpair = chunk.getPos(); -- int i = chunkcoordintpair.getMinBlockX() + world.random.nextInt(16); -- int j = chunkcoordintpair.getMinBlockZ() + world.random.nextInt(16); -+ int i = chunkcoordintpair.getMinBlockX() + world.getThreadUnsafeRandom().nextInt(16); // Pufferfish - use thread unsafe random -+ int j = chunkcoordintpair.getMinBlockZ() + world.getThreadUnsafeRandom().nextInt(16); // Pufferfish - int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1; -- int l = Mth.randomBetweenInclusive(world.random, world.getMinBuildHeight(), k); -+ int l = Mth.randomBetweenInclusive(world.getThreadUnsafeRandom(), world.getMinBuildHeight(), k); // Pufferfish - - 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 64076a452a315090d299a7a58a43fd3b5c1b4e0a..0c317b0147a73a8075e0883f0c132f4db0bdfea7 100644 ---- a/src/main/java/net/minecraft/world/level/biome/Biome.java -+++ b/src/main/java/net/minecraft/world/level/biome/Biome.java -@@ -63,13 +63,18 @@ public final class Biome { - private final BiomeGenerationSettings generationSettings; - private final MobSpawnSettings mobSettings; - private final BiomeSpecialEffects specialEffects; -- private final ThreadLocal temperatureCache = ThreadLocal.withInitial(() -> Util.make(() -> { -+ // Pufferfish start - use our cache -+ private final ThreadLocal temperatureCache = ThreadLocal.withInitial(() -> 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 - })); - - Biome(Biome.ClimateSettings weather, BiomeSpecialEffects effects, BiomeGenerationSettings generationSettings, MobSpawnSettings spawnSettings) { -@@ -112,17 +117,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(); -+ float f = cache.getValue(l); - if (!Float.isNaN(f)) { - return f; - } else { - float g = this.getHeightAdjustedTemperature(blockPos); -- if (long2FloatLinkedOpenHashMap.size() == 1024) { -- long2FloatLinkedOpenHashMap.removeFirstFloat(); -- } -- -- long2FloatLinkedOpenHashMap.put(l, g); -+ cache.putValue(l, g); -+ // Pufferfish end - 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 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; - public class ChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity { - - private static final int EVENT_SET_OPEN_COUNT = 1; -+ // Pufferfish start - private NonNullList items; -+ private gg.airplane.structs.ItemListWithBitset optimizedItems; -+ // Pufferfish end - public final ContainerOpenersCounter openersCounter; - private final ChestLidController chestLidController; - -@@ -65,9 +68,13 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - } - // CraftBukkit end - -+ private final boolean isNative = getClass().equals(ChestBlockEntity.class); // Pufferfish - protected ChestBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { - super(type, pos, state); -- this.items = NonNullList.withSize(27, ItemStack.EMPTY); -+ // Pufferfish start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(27); -+ this.items = this.optimizedItems.nonNullList; -+ // Pufferfish end - this.openersCounter = new ContainerOpenersCounter() { - @Override - protected void onOpen(Level world, BlockPos pos, BlockState state) { -@@ -98,6 +105,23 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - this.chestLidController = new ChestLidController(); - } - -+ // Pufferfish start -+ @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return isNative ? !this.optimizedItems.hasFullStacks() : super.hasEmptySlot(enumdirection); -+ } -+ -+ @Override -+ public boolean isCompletelyFull(Direction enumdirection) { -+ return isNative ? this.optimizedItems.hasFullStacks() && super.isCompletelyFull(enumdirection) : super.isCompletelyFull(enumdirection); -+ } -+ -+ @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { -+ return isNative && this.optimizedItems.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); -+ } -+ // Pufferfish end -+ - public ChestBlockEntity(BlockPos pos, BlockState state) { - this(BlockEntityType.CHEST, pos, state); - } -@@ -115,7 +139,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - @Override - public void load(CompoundTag nbt) { - super.load(nbt); -- this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ // Pufferfish start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); -+ this.items = this.optimizedItems.nonNullList; -+ // Pufferfish end - if (!this.tryLoadLootTable(nbt)) { - ContainerHelper.loadAllItems(nbt, this.items); - } -@@ -187,7 +214,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - - @Override - protected void setItems(NonNullList list) { -- this.items = list; -+ // Pufferfish start -+ this.optimizedItems = gg.airplane.structs.ItemListWithBitset.fromList(list); -+ this.items = this.optimizedItems.nonNullList; -+ // Pufferfish end - } - - @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 cdb739df2a285032d25d84f4464f202a7a3fa578..6b9cd8543a5bfc2b936ba18f66ffd60f2f792e43 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 -@@ -48,7 +48,10 @@ 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 - public int cooldownTime; - private long tickedGameTime; - -@@ -84,14 +87,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - - public HopperBlockEntity(BlockPos pos, BlockState state) { - super(BlockEntityType.HOPPER, pos, state); -- this.items = NonNullList.withSize(5, ItemStack.EMPTY); -+ // Pufferfish start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(5); -+ this.items = this.optimizedItems.nonNullList; -+ // Pufferfish end - this.cooldownTime = -1; - } - -+ // Pufferfish start -+ @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return !this.optimizedItems.hasFullStacks(); -+ } -+ -+ @Override -+ public boolean isCompletelyFull(Direction enumdirection) { -+ return this.optimizedItems.hasFullStacks() && super.isCompletelyFull(enumdirection); -+ } -+ -+ @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { -+ return this.optimizedItems.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); -+ } -+ // Pufferfish end -+ - @Override - public void load(CompoundTag nbt) { - super.load(nbt); -- this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ // Pufferfish start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); -+ this.items = this.optimizedItems.nonNullList; -+ // Pufferfish end - if (!this.tryLoadLootTable(nbt)) { - ContainerHelper.loadAllItems(nbt, this.items); - } -@@ -492,6 +518,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - } - - private static boolean isFullContainer(Container inventory, Direction direction) { -+ if (true) return inventory.isCompletelyFull(direction); // Pufferfish - use bitsets - // Paper start - Perf: Optimize Hoppers - if (inventory instanceof WorldlyContainer worldlyContainer) { - for (final int slot : worldlyContainer.getSlotsForFace(direction)) { -@@ -514,7 +541,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - } - - private static boolean isEmptyContainer(Container inv, Direction facing) { -- return allMatch(inv, facing, IS_EMPTY_TEST); // Paper - Perf: Optimize Hoppers -+ // Pufferfish start - use bitsets -+ //return allMatch(inv, facing, IS_EMPTY_TEST); // Paper - Perf: Optimize Hoppers -+ return inv.isCompletelyEmpty(facing); -+ // Pufferfish end - } - - public static boolean suckInItems(Level world, Hopper hopper) { -@@ -714,7 +744,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - - if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, side)) { - boolean flag = false; -- boolean flag1 = to.isEmpty(); -+ boolean flag1 = to.isCompletelyEmpty(side); // Pufferfish - - if (itemstack1.isEmpty()) { - // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem -@@ -909,7 +939,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - - @Override - protected void setItems(NonNullList list) { -- this.items = list; -+ // Pufferfish start -+ this.optimizedItems = gg.airplane.structs.ItemListWithBitset.fromList(list); -+ this.items = this.optimizedItems.nonNullList; -+ // Pufferfish end - } - - 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 dfd1246b735fe64c5beae83567a013861eb00822..fa64bf5ad13c278438039b663ea3134e72108411 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 -@@ -94,12 +94,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc - public boolean isEmpty() { - this.unpackLootTable(null); - // Paper start - Perf: Optimize Hoppers -- for (final ItemStack itemStack : this.getItems()) { -- if (!itemStack.isEmpty()) { -- return false; -- } -- } -- return true; -+ return this.isCompletelyEmpty(null); // Pufferfish - use super - // Paper end - Perf: Optimize Hoppers - } - 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 465458e8a7dbaf9afb32709a71c7b2620d1e1fd2..270a892373ecbb3982990d6201d79c8a66de4f60 100644 +index 7c11853c5090fbc4fa5b3e73a69acf166158fdec..00987d0e1ee8a9541b0610616ace1c84d50e5f1a 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 { +@@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p + private final LevelChunkTicks blockTicks; private final LevelChunkTicks fluidTicks; - public volatile FullChunkStatus chunkStatus = FullChunkStatus.INACCESSIBLE; // Paper - rewrite chunk system + // Pufferfish start - instead of using a random every time the chunk is ticked, define when lightning strikes preemptively + private int lightningTick; @@ -3006,28 +2208,28 @@ index 465458e8a7dbaf9afb32709a71c7b2620d1e1fd2..270a892373ecbb3982990d6201d79c8a public LevelChunk(Level world, ChunkPos pos) { this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null); } -@@ -109,6 +121,8 @@ public class LevelChunk extends ChunkAccess { - this.postLoad = entityLoader; - this.blockTicks = blockTickScheduler; - this.fluidTicks = fluidTickScheduler; +@@ -117,6 +129,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p + this.debug = !empty && this.level.isDebug(); + this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE; + // Paper end - get block chunk optimisation + -+ this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick ++ this.lightningTick = new java.util.Random().nextInt(100000) << 1; // Pufferfish - initialize lightning tick } // 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 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..2422ca3ffc6ab7178cacf933b8013f85e7de4bd9 100644 +index c3b1caa352b988ec44fa2b2eb0536517711f5460..a28366b8ed0da356dad6941e0a817d0b7ec43738 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 { +@@ -22,6 +22,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_ + short nonEmptyBlockCount; // Paper - package private + private short tickingBlockCount; + private short tickingFluidCount; ++ public short fluidStateCount; // Pufferfish public final PalettedContainer states; // CraftBukkit start - read/write private PalettedContainer> biomes; -+ public short fluidStateCount; // Pufferfish - public final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper - // Paper start - optimise collisions - private int specialCollidingBlocks; -@@ -102,6 +103,7 @@ public class LevelChunkSection { +@@ -104,6 +105,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_ if (!fluid.isEmpty()) { --this.tickingFluidCount; @@ -3035,37 +2237,37 @@ index 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..2422ca3ffc6ab7178cacf933b8013f85 } if (!state.isAir()) { -@@ -116,6 +118,7 @@ public class LevelChunkSection { +@@ -115,6 +117,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_ if (!fluid1.isEmpty()) { ++this.tickingFluidCount; + ++this.fluidStateCount; // Pufferfish } - this.updateBlockCallback(x, y, z, iblockdata1, state); // Paper - optimise collisions -@@ -162,6 +165,7 @@ public class LevelChunkSection { + // Paper start - block counting +@@ -208,6 +211,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_ if (fluid.isRandomlyTicking()) { - this.tickingFluidCount = (short) (this.tickingFluidCount + 1); + this.tickingFluidCount += paletteCount; } -+ this.fluidStateCount++; // Pufferfish ++ this.fluidStateCount++; // Pufferfish } - - // 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 83a39f900551e39d5af6f17a339a386ddee4feef..0c8c534fc69172387f188af5282accfed7597ac7 100644 +index d8b4196adf955f8d414688dc451caac2d9c609d9..80a43def4912a3228cd95117d5c2aac68798b4ec 100644 --- a/src/main/java/net/minecraft/world/level/entity/EntityTickList.java +++ b/src/main/java/net/minecraft/world/level/entity/EntityTickList.java @@ -9,7 +9,7 @@ import javax.annotation.Nullable; import net.minecraft.world.entity.Entity; public class EntityTickList { -- private final io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet entities = new io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet<>(true); // Paper - rewrite this, always keep this updated - why would we EVER tick an entity that's not ticking? -+ public final io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet entities = new io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet<>(true); // Paper - rewrite this, always keep this updated - why would we EVER tick an entity that's not ticking? // Pufferfish - private->public +- private final ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet entities = new ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet<>(); // Paper - rewrite chunk system ++ public final ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet entities = new ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet<>(); // Paper - rewrite chunk system // Pufferfish - private->public private void ensureActiveIsNotIterated() { - // Paper - replace with better logic, do not delay removals + // Paper - rewrite chunk system 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 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03 100644 +index 1c0712295695727ee9c4d430d4157b8e17cbd71f..6785baf574f233ed1c3bea8d406be8a524d9ff82 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 { @@ -3092,16 +2294,16 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7ee private final Map shapes = Maps.newIdentityHashMap(); public FlowingFluid() {} -@@ -251,6 +261,8 @@ public abstract class FlowingFluid extends Fluid { - return false; - } - // Paper end - optimise collisions +@@ -240,6 +250,8 @@ public abstract class FlowingFluid extends Fluid { + } + + private boolean canPassThroughWall(Direction face, BlockGetter world, BlockPos pos, BlockState state, BlockPos fromPos, BlockState fromState) { + // Pufferfish start - modify to use our cache + /* Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap; if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { -@@ -258,9 +270,16 @@ public abstract class FlowingFluid extends Fluid { +@@ -247,9 +259,16 @@ public abstract class FlowingFluid extends Fluid { } else { object2bytelinkedopenhashmap = null; } @@ -3118,7 +2320,7 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7ee if (object2bytelinkedopenhashmap != null) { block_a = new Block.BlockStatePairKey(state, fromState, face); byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block_a); -@@ -271,11 +290,22 @@ public abstract class FlowingFluid extends Fluid { +@@ -260,11 +279,22 @@ public abstract class FlowingFluid extends Fluid { } else { block_a = null; } @@ -3141,7 +2343,7 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7ee if (object2bytelinkedopenhashmap != null) { if (object2bytelinkedopenhashmap.size() == 200) { object2bytelinkedopenhashmap.removeLastByte(); -@@ -283,6 +313,11 @@ public abstract class FlowingFluid extends Fluid { +@@ -272,6 +302,11 @@ public abstract class FlowingFluid extends Fluid { object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0)); } @@ -3263,31 +2465,6 @@ index 88a4a72bb390947dc17e5da09a99b2d1b3ac4621..284c76ddb9724b44bb2e93f590685c72 } @Nullable -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c490a29bcf7410bc54959ee71375605964379ed5..18bfe2fb7efad66f5fae07a30593d640c597bf77 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -266,7 +266,7 @@ import javax.annotation.Nullable; // Paper - import javax.annotation.Nonnull; // Paper - - public final class CraftServer implements Server { -- private final String serverName = "Paper"; // Paper -+ private final String serverName = "Pufferfish"; // Paper // Pufferfish - private final String serverVersion; - private final String bukkitVersion = Versioning.getBukkitVersion(); - private final Logger logger = Logger.getLogger("Minecraft"); -@@ -1137,6 +1137,11 @@ public final class CraftServer implements Server { - plugin.getPluginMeta().getDisplayName(), - "This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies." - )); -+ getLogger().log(Level.SEVERE, String.format("%s Stacktrace", worker.getThread().getName())); -+ StackTraceElement[] stackTrace = worker.getThread().getStackTrace(); -+ for (StackTraceElement element : stackTrace) { -+ getLogger().log(Level.SEVERE, " " + element.toString()); -+ } - } - } - // Paper end - Wait for Async Tasks during shutdown diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e213b081f29 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java @@ -3301,10 +2478,10 @@ index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e21 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 3c7a771c48cc2732cc038ca11bb93ec5f8c2d667..94681c5d807019be5caf0b5d5156c0d670f45f8f 100644 +index 28dbe30a98a6730839949bc9a6a90b78619ff84d..65e27259c3a44512f395b750e93226bb36743ff5 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -502,7 +502,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -487,7 +487,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { @@ -3327,7 +2504,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8 if (stream != null) { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 3283ed99c35ffed6805567705e0518d9f84feedc..d7c7e12c0b8f77e59d94de130972f762ed227726 100644 +index bf2d18f74b0f0da7c3c30310c74224a1c0853564..1461daa08c5b671b8556f29f90400b7e98285a44 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; diff --git a/patches/server/0002-Fix-pufferfish-issues.patch b/patches/server/0002-Fix-pufferfish-issues.patch new file mode 100644 index 000000000..c6c5475ad --- /dev/null +++ b/patches/server/0002-Fix-pufferfish-issues.patch @@ -0,0 +1,113 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Tue, 4 Jan 2022 23:05:41 -0600 +Subject: [PATCH] Fix pufferfish issues + + +diff --git a/build.gradle.kts b/build.gradle.kts +index fd1ac5dbc39068d4332fd264f3359e4845e529e1..f138c6fb5410c416d6af4d49ae51c9ac840515d6 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -49,7 +49,7 @@ dependencies { + + // Pufferfish start + implementation("org.yaml:snakeyaml:1.32") +- implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.8.4") { ++ implementation ("com.github.carleslc.Simple-YAML:Simple-Yaml:1.8.4") { // Purpur + exclude(group="org.yaml", module="snakeyaml") + } + // Pufferfish end +diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +index d63994b04e8848c620024c148f72af9095cd93a3..92685ae1288fa509301c696bd7e49fcdab8062af 100644 +--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java ++++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +@@ -232,7 +232,7 @@ public class PufferfishConfig { + public static int activationDistanceMod; + + private static void dynamicActivationOfBrains() throws IOException { +- dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", true); ++ dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", false); // Purpur + startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, + "This value determines how far away an entity has to be", + "from the player to start being effected by DEAR."); +@@ -276,7 +276,7 @@ public class PufferfishConfig { + + public static boolean throttleInactiveGoalSelectorTick; + private static void inactiveGoalSelectorThrottle() { +- throttleInactiveGoalSelectorTick = getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, ++ throttleInactiveGoalSelectorTick = getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", false, // Purpur + "Throttles the AI goal selector in entity inactive ticks.", + "This can improve performance by a few percent, but has minor gameplay implications."); + } +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +index 790bad0494454ca12ee152e3de6da3da634d9b20..bf1aacdfac2d501c62038a22cb9eac7f9b946619 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +@@ -31,6 +31,7 @@ public record ServerBuildInfoImpl( + private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit"; + + private static final String BRAND_PAPER_NAME = "Paper"; ++ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; // Purpur + + private static final String BUILD_DEV = "DEV"; + +@@ -42,9 +43,9 @@ public record ServerBuildInfoImpl( + this( + getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) + .map(Key::key) +- .orElse(BRAND_PAPER_ID), ++ .orElse(BRAND_PUFFERFISH_ID), // Purpur + getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) +- .orElse(BRAND_PAPER_NAME), ++ .orElse(BRAND_PUFFERFISH_NAME), // Purpur + SharedConstants.getCurrentVersion().getId(), + SharedConstants.getCurrentVersion().getName(), + getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) +@@ -61,7 +62,7 @@ public record ServerBuildInfoImpl( + + @Override + public boolean isBrandCompatible(final @NotNull Key brandId) { +- return brandId.equals(this.brandId); ++ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur + } + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java +index 3f7812c55dae82433336d6e091aa83434615fa04..52af2341b1ce1ee358d60505f34018a5acd09176 100644 +--- a/src/main/java/net/minecraft/world/entity/Entity.java ++++ b/src/main/java/net/minecraft/world/entity/Entity.java +@@ -850,7 +850,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + public void tick() { + // Pufferfish start - entity TTL + if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) { +- discard(); ++ discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + return; + } + // Pufferfish end - entity TTL +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 a694fe9cffe96fc425bbd29af430f67813ff8e8c..369452f3392b53a1e7e8b6e0e2048bc71274f439 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +@@ -71,7 +71,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { + if (!isLoaded) { + if (Projectile.loadedThisTick > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerTick) { + if (++this.loadedLifetime > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerProjectile) { +- this.discard(); ++ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + } + return; + } +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 8ccd3b8fcaa80f60b91a6c066e312542d349246a..db4bd5d94ba58ad0457bfd957f708f5354ce669b 100644 +--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java ++++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +@@ -130,7 +130,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p + this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE; + // Paper end - get block chunk optimisation + +- this.lightningTick = new java.util.Random().nextInt(100000) << 1; // Pufferfish - initialize lightning tick ++ this.lightningTick = java.util.concurrent.ThreadLocalRandom.current().nextInt(100000) << 1; // Pufferfish - initialize lightning tick // Purpur - any random will do + } + + // CraftBukkit start diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0003-Rebrand.patch similarity index 96% rename from patches/server/0001-Rebrand.patch rename to patches/server/0003-Rebrand.patch index 4075180a9..e3aa16c3b 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0003-Rebrand.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 421f6b3dc8890d63d2e7aa774d0bf8f7e15890ab..409a46eb82262b00a626683072f2734255f2c2b8 100644 +index f138c6fb5410c416d6af4d49ae51c9ac840515d6..97a4a54dfa74df7aafd9df5a0f2fdac72471c2d5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { -- implementation(project(":paper-api")) -+ implementation(project(":purpur-api")) // Purpur +- implementation(project(":pufferfish-api")) // Pufferfish // Paper ++ implementation(project(":purpur-api")) // Pufferfish // Paper // Purpur // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -47,6 +47,10 @@ 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") +@@ -54,6 +54,10 @@ dependencies { + } + // Pufferfish end + implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur + implementation("org.mozilla:rhino-engine:1.7.14") // Purpur @@ -28,27 +28,27 @@ index 421f6b3dc8890d63d2e7aa774d0bf8f7e15890ab..409a46eb82262b00a626683072f27342 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -84,14 +88,14 @@ tasks.jar { +@@ -99,14 +103,14 @@ tasks.jar { val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", -- "Implementation-Title" to "Paper", -+ "Implementation-Title" to "Purpur", // Purpur +- "Implementation-Title" to "Pufferfish", // Pufferfish ++ "Implementation-Title" to "Purpur", // Pufferfish // Purpur "Implementation-Version" to implementationVersion, "Implementation-Vendor" to date, // Paper -- "Specification-Title" to "Paper", -+ "Specification-Title" to "Purpur", // Purpur +- "Specification-Title" to "Pufferfish", // Pufferfish ++ "Specification-Title" to "Purpur", // Pufferfish // Purpur "Specification-Version" to project.version, -- "Specification-Vendor" to "Paper Team", -- "Brand-Id" to "papermc:paper", -- "Brand-Name" to "Paper", -+ "Specification-Vendor" to "Purpur Team", // Purpur -+ "Brand-Id" to "purpurmc:purpur", // Purpur -+ "Brand-Name" to "Purpur", // Purpur +- "Specification-Vendor" to "Pufferfish Studios LLC", // Pufferfish +- "Brand-Id" to "pufferfish:pufferfish", // Pufferfish +- "Brand-Name" to "Pufferfish", // Pufferfish ++ "Specification-Vendor" to "Purpur Team", // Pufferfish // Purpur ++ "Brand-Id" to "purpurmc:purpur", // Pufferfish // Purpur ++ "Brand-Name" to "Purpur", // Pufferfish // Purpur "Build-Number" to (build ?: ""), "Build-Time" to Instant.now().toString(), "Git-Branch" to gitBranch, // Paper -@@ -148,7 +152,7 @@ fun TaskContainer.registerRunTask( +@@ -163,7 +167,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -151,35 +151,35 @@ index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..3cb56595822799926a8141e60a42f5d1 .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index 790bad0494454ca12ee152e3de6da3da634d9b20..a6e5950b5875cafd734300cdfbf58f5d3736f3c8 100644 +index bf1aacdfac2d501c62038a22cb9eac7f9b946619..3099c21ee589acf6edff5903a23673adf489024f 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -@@ -31,6 +31,7 @@ public record ServerBuildInfoImpl( - private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit"; +@@ -32,6 +32,7 @@ public record ServerBuildInfoImpl( private static final String BRAND_PAPER_NAME = "Paper"; + private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; // Purpur + private static final String BRAND_PURPUR_NAME = "Purpur"; // Purpur private static final String BUILD_DEV = "DEV"; -@@ -42,9 +43,9 @@ public record ServerBuildInfoImpl( +@@ -43,9 +44,9 @@ public record ServerBuildInfoImpl( this( getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) .map(Key::key) -- .orElse(BRAND_PAPER_ID), +- .orElse(BRAND_PUFFERFISH_ID), // Purpur + .orElse(BRAND_PURPUR_ID), // Purpur getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) -- .orElse(BRAND_PAPER_NAME), +- .orElse(BRAND_PUFFERFISH_NAME), // Purpur + .orElse(BRAND_PURPUR_NAME), // Purpur SharedConstants.getCurrentVersion().getId(), SharedConstants.getCurrentVersion().getName(), getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) -@@ -61,7 +62,7 @@ public record ServerBuildInfoImpl( +@@ -62,7 +63,7 @@ public record ServerBuildInfoImpl( @Override public boolean isBrandCompatible(final @NotNull Key brandId) { -- return brandId.equals(this.brandId); -+ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur +- return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur ++ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID) || brandId.equals(BRAND_PUFFERFISH_ID); // Purpur } @Override @@ -267,27 +267,27 @@ index 2f4d6b56301195f8d39ed50dffe842464065bfe1..30ddb35140ae4a6faba98c191bb8eadb // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 41c34ffdf9d95a04ed55a1e09ebc78e8cf946777..4f25368d55496667f1dc2cb2879b6d783464292b 100644 +index 00918d92a4105cc82a4d871423e516939cad951f..d85fe70212cb3203c432585e8c7ca4776338fc83 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -487,7 +487,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { -- return new com.destroystokyo.paper.PaperVersionFetcher(); -+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Purpur - TODO: Pufferfish +- return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish ++ return new com.destroystokyo.paper.PaperVersionFetcher(); // Pufferfish // Purpur } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 774556a62eb240da42e84db4502e2ed43495be17..99597258e8e88cd9e2c901c4ac3ff7faeeabee2b 100644 +index 80553face9c70c2a3d897681e7761df85b22d464..99597258e8e88cd9e2c901c4ac3ff7faeeabee2b 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java @@ -11,7 +11,7 @@ public final class Versioning { public static String getBukkitVersion() { String result = "Unknown-Version"; -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); +- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Pufferfish // Purpur Properties properties = new Properties(); diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch similarity index 97% rename from patches/server/0002-Purpur-config-files.patch rename to patches/server/0004-Purpur-config-files.patch index 29d6defad..ac1551f13 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0004-Purpur-config-files.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 4b002e8b75d117b726b0de274a76d3596fce015b..8cde30544e14f8fc2dac32966ae3c21f8cf3a551 100644 +index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f8cf3a551 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -593,7 +593,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { -- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); +- Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish + Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { @@ -26,11 +26,11 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..8cde30544e14f8fc2dac32966ae3c21f - final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); - if (implVersion != null) { - final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); -- paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); +- paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish - } else { - paperVersion = "unknown"; - } -- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion)); +- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish + metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur + metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur @@ -72,7 +72,7 @@ index 2d344df35d47b4b1ecddf32ccaa4dae41e5f58cb..2f7ed5b38e8930b3a615f160cdf4c5b0 boolean flag1 = this.source.acceptsSuccess() && !this.silent; boolean flag2 = broadcastToOps && this.source.shouldInformAdmins() && !this.silent; diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index dd56c8e041116ef3602a9f89c998c8208ab89b51..a96e7df92b7d45e1c6750368fda647be026f657b 100644 +index 18bf9c42e76c8c35f57d74ea4adfa5b3bb53762f..ca9afa93a9c43208ef64f86d534e5540d34a6b09 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -238,6 +238,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -89,10 +89,10 @@ index dd56c8e041116ef3602a9f89c998c8208ab89b51..a96e7df92b7d45e1c6750368fda647be + org.purpurmc.purpur.PurpurConfig.registerCommands(); + // Purpur end com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now - - this.setPvpAllowed(dedicatedserverproperties.pvp); + gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish + gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..04953d12a6aab561b9510adad145918aee7768c1 100644 +index d3cc65612c44f42ecae2e09b942438a03bc244bd..116cfd126df3ed5c6643e70912c0d6a63f4a6eb2 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -173,6 +173,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl diff --git a/patches/server/0003-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch similarity index 100% rename from patches/server/0003-Purpur-client-support.patch rename to patches/server/0005-Purpur-client-support.patch diff --git a/patches/server/0004-MC-Utils.patch b/patches/server/0006-MC-Utils.patch similarity index 100% rename from patches/server/0004-MC-Utils.patch rename to patches/server/0006-MC-Utils.patch diff --git a/patches/server/0005-Fix-decompile-errors.patch b/patches/server/0007-Fix-decompile-errors.patch similarity index 100% rename from patches/server/0005-Fix-decompile-errors.patch rename to patches/server/0007-Fix-decompile-errors.patch diff --git a/patches/server/0006-Component-related-conveniences.patch b/patches/server/0008-Component-related-conveniences.patch similarity index 93% rename from patches/server/0006-Component-related-conveniences.patch rename to patches/server/0008-Component-related-conveniences.patch index 25b89b01c..08cdd6896 100644 --- a/patches/server/0006-Component-related-conveniences.patch +++ b/patches/server/0008-Component-related-conveniences.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Component related conveniences diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index ce09c4900aee5a75c0d13a7bffd97a0711ead774..37adf5d3c6248547d830248714f32dbec653d653 100644 +index cb25a8796dda84fb08865a2af769fb4d10597685..ffc7f4f4544df21b713b780eded8aeba4090db52 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2005,6 +2005,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2004,6 +2004,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -81,10 +81,10 @@ index bb1a60180e58c1333e7bb33e8acf1b0225eda8a8..c83e80ebdbbfb2d0e08561a44486a308 return this.type().msgId(); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1f7594e22f0f08ae110ef9b42f15119358aa5723..78a218bf01609dffcd3741ddc7b27190af7f2731 100644 +index 52af2341b1ce1ee358d60505f34018a5acd09176..9dd838972d83196dfda620b223ea17fbf7c125a4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4176,6 +4176,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4185,6 +4185,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return SlotAccess.NULL; } diff --git a/patches/server/0007-Ridables.patch b/patches/server/0009-Ridables.patch similarity index 97% rename from patches/server/0007-Ridables.patch rename to patches/server/0009-Ridables.patch index 0742b41ee..6ab849d8f 100644 --- a/patches/server/0007-Ridables.patch +++ b/patches/server/0009-Ridables.patch @@ -22,10 +22,10 @@ index 2767d6f97e8b314d23a8e62f22dfd396f5660d31..a64e5997b94cc8173f0512d1e282355f super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 23ddd26af762c1cd7fb3920669abb96b3213ab37..e5ae7478cf2d3ef9d484116db742dd8c5bfb74b2 100644 +index 30907b63234642a4e760ae865c4a91e3162e52f2..7910506ea405498826a3150af131f5b0aac4b577 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1785,6 +1785,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.updateLagCompensationTick(); // Paper - lag compensation @@ -34,7 +34,7 @@ index 23ddd26af762c1cd7fb3920669abb96b3213ab37..e5ae7478cf2d3ef9d484116db742dd8c this.profiler.push(() -> { String s = String.valueOf(worldserver); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..559bec25060eb8981bf80213ceedb79d6c99e411 100644 +index 5a9712de8abe3c3ccd08c5699f89e3ce54b1f28d..13541b8d94981705bd32fdd8d8e9c170f9143317 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -229,6 +229,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -46,7 +46,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..559bec25060eb8981bf80213ceedb79d public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 2bd74f003b132b9925002ac79ea066973c9047a4..50ff7afa040c54e538e191322146df48c6675df0 100644 +index ffc7f4f4544df21b713b780eded8aeba4090db52..6cad742f0141ac0e4b4b5a1dd07874eb7588e70f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -805,6 +805,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -66,10 +66,10 @@ index 2bd74f003b132b9925002ac79ea066973c9047a4..50ff7afa040c54e538e191322146df48 private void updatePlayerAttributes() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 60ff21c8df4168f14da04a12073bde47cd4693c4..a7f7c140b2c6ee936699e25a72b7e4fcb3705b97 100644 +index 301dc8ea0574f02f28067cda397683c7e7a6152f..ff97005181c2b55ffb2be6d19f27b34f26a2e20c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2712,6 +2712,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2713,6 +2713,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -79,7 +79,7 @@ index 60ff21c8df4168f14da04a12073bde47cd4693c4..a7f7c140b2c6ee936699e25a72b7e4fc if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0d54e2c5c1a65c979a1188e1cd9f61e23981dd5d..6b3a97195be55076fa287a9463e1727575b9b49b 100644 +index 9dd838972d83196dfda620b223ea17fbf7c125a4..5d2d310da657963b830efa7de2486180736613f0 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -383,7 +383,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -91,7 +91,7 @@ index 0d54e2c5c1a65c979a1188e1cd9f61e23981dd5d..6b3a97195be55076fa287a9463e17275 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3124,6 +3124,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3133,6 +3133,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 0d54e2c5c1a65c979a1188e1cd9f61e23981dd5d..6b3a97195be55076fa287a9463e17275 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3163,6 +3170,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3172,6 +3179,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -120,7 +120,7 @@ index 0d54e2c5c1a65c979a1188e1cd9f61e23981dd5d..6b3a97195be55076fa287a9463e17275 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5002,4 +5017,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5063,4 +5078,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -190,10 +190,10 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..aa76a24421cdb3908a3544d92eb3d1e3 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..b32460d324d93fed734be5d92baf0359ad5b0a80 100644 +index ce0d28cafcae0b7edc861749a1652ecc08d298b5..e7b9f129a31c57df65e9be082de1d2f31a327599 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -237,9 +237,9 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -236,9 +236,9 @@ public abstract class LivingEntity extends Entity implements Attackable { protected int deathScore; public float lastHurt; public boolean jumping; @@ -206,7 +206,7 @@ index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..b32460d324d93fed734be5d92baf0359 protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -313,7 +313,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -312,7 +312,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.lastClimbablePos = Optional.empty(); this.activeLocationDependentEnchantments = new Reference2ObjectArrayMap(); this.appliedScale = 1.0F; @@ -215,7 +215,7 @@ index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..b32460d324d93fed734be5d92baf0359 this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -363,6 +363,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -362,6 +362,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public static AttributeSupplier.Builder createLivingAttributes() { return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS).add(Attributes.MAX_ABSORPTION).add(Attributes.STEP_HEIGHT).add(Attributes.SCALE).add(Attributes.GRAVITY).add(Attributes.SAFE_FALL_DISTANCE).add(Attributes.FALL_DAMAGE_MULTIPLIER).add(Attributes.JUMP_STRENGTH).add(Attributes.OXYGEN_BONUS).add(Attributes.BURNING_TIME).add(Attributes.EXPLOSION_KNOCKBACK_RESISTANCE).add(Attributes.WATER_MOVEMENT_EFFICIENCY).add(Attributes.MOVEMENT_EFFICIENCY).add(Attributes.ATTACK_KNOCKBACK); } @@ -223,7 +223,7 @@ index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..b32460d324d93fed734be5d92baf0359 @Override protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) { -@@ -3553,8 +3554,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3579,8 +3580,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level().getProfiler().pop(); // Paper start - Add EntityMoveEvent @@ -236,7 +236,7 @@ index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..b32460d324d93fed734be5d92baf0359 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3564,6 +3567,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3590,6 +3593,21 @@ public abstract class LivingEntity extends Entity implements Attackable { this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -259,7 +259,7 @@ index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..b32460d324d93fed734be5d92baf0359 // Paper end - Add EntityMoveEvent if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index bd7c6ce15698aed70376c109ba36f52d6794a2f8..99b227dc5940ddc16d41b2e37c4683268b9e4112 100644 +index 7c207bd1da82255bf504f9212c08201fe9389f1a..9010da67e2a20c58195d8a49244d6850468fb153 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -160,8 +160,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -273,7 +273,7 @@ index bd7c6ce15698aed70376c109ba36f52d6794a2f8..99b227dc5940ddc16d41b2e37c468326 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -1504,7 +1504,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1510,7 +1510,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -282,7 +282,7 @@ index bd7c6ce15698aed70376c109ba36f52d6794a2f8..99b227dc5940ddc16d41b2e37c468326 } public boolean isWithinRestriction() { -@@ -1802,4 +1802,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1808,4 +1808,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -340,13 +340,13 @@ index bd7c6ce15698aed70376c109ba36f52d6794a2f8..99b227dc5940ddc16d41b2e37c468326 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..1ec4ba9799cccb6337a63d8287e269b102f59aa1 100644 +index 2c9aab24b51d2f0a50100089fe72093b501d383a..00346f83e71193d1378937d51c5e846edcf7e7ba 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,14 +23,21 @@ public class AttributeMap { - private final Set attributesToSync = new ObjectOpenHashSet<>(); +@@ -24,15 +24,22 @@ public class AttributeMap { private final Set attributesToUpdate = new ObjectOpenHashSet<>(); private final AttributeSupplier supplier; + private final java.util.function.Function, AttributeInstance> createInstance; // Pufferfish + private final net.minecraft.world.entity.LivingEntity entity; // Purpur public AttributeMap(AttributeSupplier defaultAttributes) { @@ -357,6 +357,7 @@ index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..1ec4ba9799cccb6337a63d8287e269b1 + this.entity = entity; + // Purpur end this.supplier = defaultAttributes; + this.createInstance = attributex -> this.supplier.createInstance(this::onAttributeModified, attributex); // Pufferfish } private void onAttributeModified(AttributeInstance instance) { @@ -366,7 +367,7 @@ index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..1ec4ba9799cccb6337a63d8287e269b1 this.attributesToSync.add(instance); } } -@@ -44,7 +51,7 @@ public class AttributeMap { +@@ -46,7 +53,7 @@ public class AttributeMap { } public Collection getSyncableAttributes() { @@ -374,7 +375,7 @@ index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..1ec4ba9799cccb6337a63d8287e269b1 + return this.attributes.values().stream().filter(attribute -> attribute.getAttribute().value().isClientSyncable() && (entity == null || entity.shouldSendAttribute(attribute.getAttribute().value()))).collect(Collectors.toList()); // Purpur } - @Nullable + diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java index 10a1434313b11dae8210484583c6bf3b627416f7..35af18f371b3beaf81fcdca79fefe85e0a862b50 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java @@ -436,7 +437,7 @@ index fbfc2f2515ad709b2c1212aef9521e795547d66b..e77bd11af62682d5eca41f6c9e1aed30 this.lookAtCooldown--; this.getYRotD().ifPresent(yaw -> this.mob.yHeadRot = this.rotateTowards(this.mob.yHeadRot, yaw + 20.0F, this.yMaxRotSpeed)); 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 dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..c4a09778ca6bf5c15b588234bcadec3496017e3d 100644 +index e44af851263f27aa0009b14a60bb2d0642a5ce74..082fa26528d3861702db423db092c1cea3cc7c2c 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -44,12 +44,59 @@ public class Bat extends AmbientCreature { @@ -2011,7 +2012,7 @@ index 22024d79b566ad5d388ceb644605ada3123ca608..9f2d7ea463f663c0706ebaf73d140aa5 this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index 69986f75d3cf729204cca0c7e5428536af31f695..49dccfc0010b5727250f7e27591502408c903739 100644 +index 98a759dbe46e2ead39af0f340c9b73c8f4ddce1e..9071ef2a5751bd691cd1ef85e3889e54a3f8bf8b 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 @@ -102,10 +102,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -2068,11 +2069,12 @@ index 69986f75d3cf729204cca0c7e5428536af31f695..49dccfc0010b5727250f7e2759150240 @Override protected Brain.Provider brainProvider() { return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES); -@@ -220,6 +255,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -221,7 +256,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @Override protected void customServerAiStep() { this.level().getProfiler().push("allayBrain"); -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("allayActivityUpdate"); @@ -2105,7 +2107,7 @@ index 729fd2d52dd48e25ee7a077a3ffafc80ecef7c9f..8fcaf6860ad3c21ea13649219b91a1eb protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); 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 01a0731e92d39c8718538244e34a271fb8717fc2..384fb16dac5eede49d89ad9fdcddcec442f0e7ca 100644 +index 44937570f8e968ba4fe2822f69ca8f09679da89d..9165585d212ad624d5973203c372dd4ff55e64c9 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 @@ -97,6 +97,23 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { return this.modelRotationValues; -@@ -272,6 +289,7 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder> { @@ -2262,15 +2265,16 @@ index 816977990639ec0559b652fc9666afd5046f0a5d..b6a4b4e66ca67e4dcb4b14a13ab6586a @Override protected Brain.Provider brainProvider() { -@@ -184,6 +234,7 @@ public class Frog extends Animal implements VariantHolder> { +@@ -185,7 +235,7 @@ public class Frog extends Animal implements VariantHolder> { @Override protected void customServerAiStep() { this.level().getProfiler().push("frogBrain"); -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel)this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("frogActivityUpdate"); -@@ -371,7 +422,7 @@ public class Frog extends Animal implements VariantHolder> { +@@ -373,7 +423,7 @@ public class Frog extends Animal implements VariantHolder> { return world.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(world, pos); } @@ -2280,7 +2284,7 @@ index 816977990639ec0559b652fc9666afd5046f0a5d..b6a4b4e66ca67e4dcb4b14a13ab6586a super(entity); } diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -index 43046f4a0cff620834ac4647efdcde227185b2ff..057096c5252e86d828a69080bdc70538e516ce99 100644 +index 90393485ebcf8a4c8c74802fff942b1af8cfbf00..b05276065c977ea5eae3e74d15b2b5c90e352e61 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 @@ -51,13 +51,50 @@ public class Tadpole extends AbstractFish { @@ -2335,16 +2339,17 @@ index 43046f4a0cff620834ac4647efdcde227185b2ff..057096c5252e86d828a69080bdc70538 @Override protected PathNavigation createNavigation(Level world) { return new WaterBoundPathNavigation(this, world); -@@ -86,6 +123,7 @@ public class Tadpole extends AbstractFish { +@@ -87,7 +124,7 @@ public class Tadpole extends AbstractFish { @Override protected void customServerAiStep() { this.level().getProfiler().push("tadpoleBrain"); -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("tadpoleActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index 376bcbc189008464f4d518c1e07643431ba96306..691f5020df77b01523d1e292be40552089e2f538 100644 +index 07bdea8a7d6706839a758afe0242202c7e841416..ca68973e851ae933015d5dbcbca7b48f872ddd07 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 @@ -91,6 +91,23 @@ public class Goat extends Animal { @@ -2371,11 +2376,12 @@ index 376bcbc189008464f4d518c1e07643431ba96306..691f5020df77b01523d1e292be405520 @Override protected Brain.Provider brainProvider() { return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); -@@ -193,6 +210,7 @@ public class Goat extends Animal { +@@ -194,7 +211,7 @@ public class Goat extends Animal { @Override protected void customServerAiStep() { this.level().getProfiler().push("goatBrain"); -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("goatActivityUpdate"); @@ -2833,7 +2839,7 @@ index 5868d2e9e05a698c77117cf87c79b636b50fe289..0c9defe9651e3281172d70a154cd06e3 this.dragonFight.updateDragon(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index d3b4d492aee380dc17f4232d90eaae4f07bb9f86..b3c52d0b74528136523f5194acac14cc3421ef73 100644 +index 82921c56c49edb0ca07425da563aa4876d4e6fb1..229f66dec52fbc50401294e83634ac950fd75941 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 @@ -88,16 +88,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -2983,7 +2989,7 @@ index d3b4d492aee380dc17f4232d90eaae4f07bb9f86..b3c52d0b74528136523f5194acac14cc this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); } -@@ -263,6 +378,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -270,6 +385,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected void customServerAiStep() { @@ -3000,7 +3006,7 @@ index d3b4d492aee380dc17f4232d90eaae4f07bb9f86..b3c52d0b74528136523f5194acac14cc int i; if (this.getInvulnerableTicks() > 0) { -@@ -580,11 +705,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -587,11 +712,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } public int getAlternativeTarget(int headIndex) { @@ -3372,7 +3378,7 @@ index fd995b1f29c47884e9db2cb92f1dd615d62ae032..430899602940aa04c21d45ae94bcc506 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 828c51477cd8f35d591367b30bf4feef6a250292..d77e4a354983b6d6c4d5bbc37d886193af396dff 100644 +index ace4959f818bf56882b290d109b8b97f2c145631..6cc64bb79abeb49040d008b1db0be263e3dfc787 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -95,9 +95,27 @@ public class EnderMan extends Monster implements NeutralMob { @@ -3420,7 +3426,7 @@ index 828c51477cd8f35d591367b30bf4feef6a250292..d77e4a354983b6d6c4d5bbc37d886193 float f = this.getLightLevelDependentMagicValue(); if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper - EndermanEscapeEvent -@@ -396,6 +415,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -402,6 +421,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; @@ -4753,7 +4759,7 @@ index 10388cf33f6f33070aa84b3b2d7bd14fc50ceea8..18e6a56da9f714f4e5b78ec63df6cf31 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index d5e0c493f4c348724958193795ceb987765a465f..a2c0f73c84651f713781deaaa588a3c704eb32b3 100644 +index 7de73564bc73d6504e18977e97a2ef5f46189e15..e182291061d64ea9922647aa4778856390c5a215 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 @@ -90,6 +90,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -4780,16 +4786,17 @@ index d5e0c493f4c348724958193795ceb987765a465f..a2c0f73c84651f713781deaaa588a3c7 @Override public boolean canBeLeashed() { return true; -@@ -156,6 +173,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -157,7 +174,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level().getProfiler().push("hoglinBrain"); -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel)this.level(), this); this.level().getProfiler().pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index bc58323801ee16fe9b63c21332144ec002a902f2..a8df353eef6ab0dc2a6bd4242f6b85af91444ae9 100644 +index b2ae7088f90bf3cd04a59c6ddfdba60c58c6e1c8..fbf1109833abaf7bbfa7956431102cd533ae9d3c 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 @@ -93,6 +93,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -4816,11 +4823,12 @@ index bc58323801ee16fe9b63c21332144ec002a902f2..a8df353eef6ab0dc2a6bd4242f6b85af @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -296,6 +313,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -297,7 +314,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep() { this.level().getProfiler().push("piglinBrain"); -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); PiglinAi.updateActivity(this); @@ -4861,7 +4869,7 @@ index fcadd7f28ccb81bbb36e97d8b8d8a8ba3f3d6a16..17e2457bc83e7ee4402c10ee7d2ef5aa this.level().getProfiler().pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 38bf417a9ad4647f4af24d969f3bf4fed9c4bad7..ba560ab0340c06614547dcddbdcbd1bbda44bb79 100644 +index 40bbd80b1ed4afede6f0769e7f3fcfc61200452f..e8af1136b76704767e1ef1859968448c28e07f41 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 @@ -124,8 +124,32 @@ public class Warden extends Monster implements VibrationSystem { @@ -4897,7 +4905,7 @@ index 38bf417a9ad4647f4af24d969f3bf4fed9c4bad7..ba560ab0340c06614547dcddbdcbd1bb @Override public Packet getAddEntityPacket(ServerEntity entityTrackerEntry) { return new ClientboundAddEntityPacket(this, entityTrackerEntry, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -393,17 +417,14 @@ public class Warden extends Monster implements VibrationSystem { +@@ -395,17 +419,14 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -4919,10 +4927,10 @@ index 38bf417a9ad4647f4af24d969f3bf4fed9c4bad7..ba560ab0340c06614547dcddbdcbd1bb public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 7e1871401ec5e3e9a85232053490259f132aec0a..7c4c545fca0858caac1cf98ad24b6d59be79dc32 100644 +index a16d9c1661690de0374a4a3c31b119293d8fa52b..4f3de74a903dbb965ac513cc703f532fb119f5c4 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -156,6 +156,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -158,6 +158,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -4951,19 +4959,16 @@ index 7e1871401ec5e3e9a85232053490259f132aec0a..7c4c545fca0858caac1cf98ad24b6d59 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -256,6 +278,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -259,7 +281,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper end this.level().getProfiler().push("villagerBrain"); - if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper -+ /*// Purpur start // Purpur - TODO: Pufferfish + // Pufferfish start +- if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) { + if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider -+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper -+ } -+ // Purpur end*/ // Purpur - TODO: Pufferfish - this.level().getProfiler().pop(); - if (this.assignProfessionWhenSpawned) { - this.assignProfessionWhenSpawned = false; -@@ -312,7 +339,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + this.getBrain().tick((ServerLevel) this.level(), this); // Paper + } + // Pufferfish end +@@ -319,7 +341,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -4972,7 +4977,7 @@ index 7e1871401ec5e3e9a85232053490259f132aec0a..7c4c545fca0858caac1cf98ad24b6d59 } else { if (!this.level().isClientSide) { boolean flag = this.getOffers().isEmpty(); -@@ -326,9 +353,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -333,9 +355,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { diff --git a/patches/server/0008-Configurable-entity-base-attributes.patch b/patches/server/0010-Configurable-entity-base-attributes.patch similarity index 99% rename from patches/server/0008-Configurable-entity-base-attributes.patch rename to patches/server/0010-Configurable-entity-base-attributes.patch index 28e41d86f..14f2f2948 100644 --- a/patches/server/0008-Configurable-entity-base-attributes.patch +++ b/patches/server/0010-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9cc922a6b75dde1f73b6b1e823cf2918d975f3f4..10c06b32deb91dc4a65b501e57b395742ecda75b 100644 +index 5d2d310da657963b830efa7de2486180736613f0..5ffab39e5159a7eb6360fd26043887da50936130 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -168,7 +168,7 @@ import org.bukkit.plugin.PluginManager; @@ -34,10 +34,10 @@ index aa76a24421cdb3908a3544d92eb3d1e3c2ebedc4..8211c152e6f4232e82e452b08047e457 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a387268659a17a4508359f2a69d50593cefd4629..13f8289aa23fd4554235e22e4be924abe7517e27 100644 +index a4f2e5bb14ef28191a4955578e43ee856ab924b1..df19c74439e8855410446201135a997efcc88c24 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -314,6 +314,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -313,6 +313,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.activeLocationDependentEnchantments = new Reference2ObjectArrayMap(); this.appliedScale = 1.0F; this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur @@ -45,7 +45,7 @@ index a387268659a17a4508359f2a69d50593cefd4629..13f8289aa23fd4554235e22e4be924ab this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -328,6 +329,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -327,6 +328,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap())))); } @@ -55,7 +55,7 @@ index a387268659a17a4508359f2a69d50593cefd4629..13f8289aa23fd4554235e22e4be924ab return this.brain; } diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index c4a09778ca6bf5c15b588234bcadec3496017e3d..04df50970188cf6b9fbdcc1e99ea6cf8a0beee59 100644 +index 082fa26528d3861702db423db092c1cea3cc7c2c..115314cf19f8ed8f1c115f95438dee5cbe329900 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -265,6 +265,19 @@ public class Bat extends AmbientCreature { @@ -480,7 +480,7 @@ index 9f2d7ea463f663c0706ebaf73d140aa51ac307f0..2985a7bcd4153798c347efa086120ed8 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); 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 49dccfc0010b5727250f7e27591502408c903739..902882ca639eee6efe102ea70e182fb17df801c2 100644 +index 9071ef2a5751bd691cd1ef85e3889e54a3f8bf8b..498cd9cec1693445e98333c62052189bc276b1bb 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 @@ -152,6 +152,12 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -514,7 +514,7 @@ index 8fcaf6860ad3c21ea13649219b91a1eb3490242b..3cc0d4f7a8483fc5133ff3a3e42e0bb0 @Override 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 384fb16dac5eede49d89ad9fdcddcec442f0e7ca..0cf2dbc7d4ce89bddc8f23095272532cf62b3f51 100644 +index 9165585d212ad624d5973203c372dd4ff55e64c9..909ee626d9ffb4c50423d84ff4c136f0440f9b21 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 @@ -114,6 +114,12 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder implements FeatureElement, EntityTypeT +@@ -332,6 +332,16 @@ public class EntityType implements FeatureElement, EntityTypeT return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error } @@ -25,7 +25,7 @@ index cb61462d4691a055a4b25f7b953609d8a154fdfe..9d6ca8c6f009cb34fab07cc4d17a6dd5 public static ResourceLocation getKey(EntityType type) { return BuiltInRegistries.ENTITY_TYPE.getKey(type); } -@@ -537,6 +547,16 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -539,6 +549,16 @@ public class EntityType implements FeatureElement, EntityTypeT return this.category; } diff --git a/patches/server/0016-Anvil-API.patch b/patches/server/0018-Anvil-API.patch similarity index 100% rename from patches/server/0016-Anvil-API.patch rename to patches/server/0018-Anvil-API.patch diff --git a/patches/server/0017-Alternative-Keepalive-Handling.patch b/patches/server/0019-Alternative-Keepalive-Handling.patch similarity index 100% rename from patches/server/0017-Alternative-Keepalive-Handling.patch rename to patches/server/0019-Alternative-Keepalive-Handling.patch diff --git a/patches/server/0018-Enchantment-convenience-methods.patch b/patches/server/0020-Enchantment-convenience-methods.patch similarity index 100% rename from patches/server/0018-Enchantment-convenience-methods.patch rename to patches/server/0020-Enchantment-convenience-methods.patch diff --git a/patches/server/0019-Silk-touch-spawners.patch b/patches/server/0021-Silk-touch-spawners.patch similarity index 100% rename from patches/server/0019-Silk-touch-spawners.patch rename to patches/server/0021-Silk-touch-spawners.patch diff --git a/patches/server/0020-Add-turtle-egg-block-options.patch b/patches/server/0022-Add-turtle-egg-block-options.patch similarity index 100% rename from patches/server/0020-Add-turtle-egg-block-options.patch rename to patches/server/0022-Add-turtle-egg-block-options.patch diff --git a/patches/server/0021-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch similarity index 100% rename from patches/server/0021-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0023-Logger-settings-suppressing-pointless-logs.patch diff --git a/patches/server/0022-Disable-outdated-build-check.patch b/patches/server/0024-Disable-outdated-build-check.patch similarity index 100% rename from patches/server/0022-Disable-outdated-build-check.patch rename to patches/server/0024-Disable-outdated-build-check.patch diff --git a/patches/server/0023-Giants-AI-settings.patch b/patches/server/0025-Giants-AI-settings.patch similarity index 100% rename from patches/server/0023-Giants-AI-settings.patch rename to patches/server/0025-Giants-AI-settings.patch diff --git a/patches/server/0024-Zombie-horse-naturally-spawn.patch b/patches/server/0026-Zombie-horse-naturally-spawn.patch similarity index 95% rename from patches/server/0024-Zombie-horse-naturally-spawn.patch rename to patches/server/0026-Zombie-horse-naturally-spawn.patch index 0b1e24236..a308c6170 100644 --- a/patches/server/0024-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0026-Zombie-horse-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 559bec25060eb8981bf80213ceedb79d6c99e411..2b7f3935b5224709a295b8ed16ac28f6c67b36fc 100644 +index 13541b8d94981705bd32fdd8d8e9c170f9143317..ef645bf72db80a0d085c8bca29bf67cab189ffde 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -872,10 +872,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -886,10 +886,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper - Configurable spawn chances for skeleton horses if (flag1) { diff --git a/patches/server/0025-Charged-creeper-naturally-spawn.patch b/patches/server/0027-Charged-creeper-naturally-spawn.patch similarity index 100% rename from patches/server/0025-Charged-creeper-naturally-spawn.patch rename to patches/server/0027-Charged-creeper-naturally-spawn.patch diff --git a/patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 100% rename from patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch diff --git a/patches/server/0027-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from patches/server/0027-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/patches/server/0028-Tulips-change-fox-type.patch b/patches/server/0030-Tulips-change-fox-type.patch similarity index 100% rename from patches/server/0028-Tulips-change-fox-type.patch rename to patches/server/0030-Tulips-change-fox-type.patch diff --git a/patches/server/0029-Breedable-Polar-Bears.patch b/patches/server/0031-Breedable-Polar-Bears.patch similarity index 100% rename from patches/server/0029-Breedable-Polar-Bears.patch rename to patches/server/0031-Breedable-Polar-Bears.patch diff --git a/patches/server/0030-Chickens-can-retaliate.patch b/patches/server/0032-Chickens-can-retaliate.patch similarity index 100% rename from patches/server/0030-Chickens-can-retaliate.patch rename to patches/server/0032-Chickens-can-retaliate.patch diff --git a/patches/server/0031-Add-option-to-set-armorstand-step-height.patch b/patches/server/0033-Add-option-to-set-armorstand-step-height.patch similarity index 94% rename from patches/server/0031-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0033-Add-option-to-set-armorstand-step-height.patch index 76f2ecdf9..01976473d 100644 --- a/patches/server/0031-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0033-Add-option-to-set-armorstand-step-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to set armorstand step height diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 17ba651e9663793c9ab35a4333a7530d7f74f785..bd24ff21097498bbd8a37e3b35c6a94b4c18d046 100644 +index 5ffab39e5159a7eb6360fd26043887da50936130..3708fe0bb7af7b542ffd103f803223893e6dea72 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -343,6 +343,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -16,7 +16,7 @@ index 17ba651e9663793c9ab35a4333a7530d7f74f785..bd24ff21097498bbd8a37e3b35c6a94b public boolean noPhysics; public final RandomSource random; public int tickCount; -@@ -4825,7 +4826,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4886,7 +4887,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { diff --git a/patches/server/0032-Cat-spawning-options.patch b/patches/server/0034-Cat-spawning-options.patch similarity index 100% rename from patches/server/0032-Cat-spawning-options.patch rename to patches/server/0034-Cat-spawning-options.patch diff --git a/patches/server/0033-Cows-eat-mushrooms.patch b/patches/server/0035-Cows-eat-mushrooms.patch similarity index 100% rename from patches/server/0033-Cows-eat-mushrooms.patch rename to patches/server/0035-Cows-eat-mushrooms.patch diff --git a/patches/server/0034-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 100% rename from patches/server/0034-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch diff --git a/patches/server/0035-Pigs-give-saddle-back.patch b/patches/server/0037-Pigs-give-saddle-back.patch similarity index 100% rename from patches/server/0035-Pigs-give-saddle-back.patch rename to patches/server/0037-Pigs-give-saddle-back.patch diff --git a/patches/server/0036-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0038-Snowman-drop-and-put-back-pumpkin.patch similarity index 100% rename from patches/server/0036-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0038-Snowman-drop-and-put-back-pumpkin.patch diff --git a/patches/server/0037-Ender-dragon-always-drop-full-exp.patch b/patches/server/0039-Ender-dragon-always-drop-full-exp.patch similarity index 100% rename from patches/server/0037-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0039-Ender-dragon-always-drop-full-exp.patch diff --git a/patches/server/0038-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 100% rename from patches/server/0038-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch diff --git a/patches/server/0039-Minecart-settings-and-WASD-controls.patch b/patches/server/0041-Minecart-settings-and-WASD-controls.patch similarity index 99% rename from patches/server/0039-Minecart-settings-and-WASD-controls.patch rename to patches/server/0041-Minecart-settings-and-WASD-controls.patch index ff069bc9d..f105721d1 100644 --- a/patches/server/0039-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0041-Minecart-settings-and-WASD-controls.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 585b41a7e890aa6b5ea27f8fb84a8ca0310ddeb6..73015adb991322b998aad4b244b2fc2a57c6224c 100644 +index fe0bbaec0a47305da244bbca7b9ce64015ea39b8..f9d2cb898e8f19accf30de609b5f0b1ef17fa9c7 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1182,6 +1182,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple diff --git a/patches/server/0040-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch similarity index 91% rename from patches/server/0040-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch index 982b319c8..b73647fe1 100644 --- a/patches/server/0040-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 13f8289aa23fd4554235e22e4be924abe7517e27..67d34911412aad13bfaede82b9bc9ca21a97087a 100644 +index df19c74439e8855410446201135a997efcc88c24..b4c50e28cad3a063c2168cd9a813dfc6349d86e3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1868,7 +1868,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1880,7 +1880,8 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this.lastHurtByPlayerTime > 0; this.dropEquipment(); // CraftBukkit - from below @@ -18,7 +18,7 @@ index 13f8289aa23fd4554235e22e4be924abe7517e27..67d34911412aad13bfaede82b9bc9ca2 this.dropFromLootTable(damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1877,6 +1878,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1889,6 +1890,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(world, damageSource, flag); this.clearEquipmentSlots = prev; // Paper diff --git a/patches/server/0041-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch similarity index 100% rename from patches/server/0041-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch diff --git a/patches/server/0042-Skip-events-if-there-s-no-listeners.patch b/patches/server/0044-Skip-events-if-there-s-no-listeners.patch similarity index 100% rename from patches/server/0042-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0044-Skip-events-if-there-s-no-listeners.patch diff --git a/patches/server/0043-Add-permission-for-F3-N-debug.patch b/patches/server/0045-Add-permission-for-F3-N-debug.patch similarity index 100% rename from patches/server/0043-Add-permission-for-F3-N-debug.patch rename to patches/server/0045-Add-permission-for-F3-N-debug.patch diff --git a/patches/server/0044-Configurable-TPS-Catchup.patch b/patches/server/0046-Configurable-TPS-Catchup.patch similarity index 71% rename from patches/server/0044-Configurable-TPS-Catchup.patch rename to patches/server/0046-Configurable-TPS-Catchup.patch index 91ca86983..4688692be 100644 --- a/patches/server/0044-Configurable-TPS-Catchup.patch +++ b/patches/server/0046-Configurable-TPS-Catchup.patch @@ -5,22 +5,18 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index fba769c07e17b4e2401e6cbb15bfd7717d0afe03..4b0d28678136756b7c199bbc84d0fc8b0c69f904 100644 +index 079c432647055337f9d251615c6db2319e11e39d..a4d7396a013515331297b2c548cfb23d9c2c1407 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1316,6 +1316,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pages, int slotId) { @@ -45,7 +45,7 @@ index a38be909672f833b70ae74817673e6080e4a467a..4319a191f03caa56baeecdc537b61aac itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1)); this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) -@@ -1223,6 +1232,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1224,6 +1233,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void signBook(FilteredText title, List pages, int slotId) { @@ -57,7 +57,7 @@ index a38be909672f833b70ae74817673e6080e4a467a..4319a191f03caa56baeecdc537b61aac ItemStack itemstack = this.player.getInventory().getItem(slotId); if (itemstack.is(Items.WRITABLE_BOOK)) { -@@ -1230,10 +1244,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1231,10 +1245,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT); List> list1 = (List>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error @@ -70,7 +70,7 @@ index a38be909672f833b70ae74817673e6080e4a467a..4319a191f03caa56baeecdc537b61aac CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book } -@@ -1243,6 +1257,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1244,6 +1258,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message); } diff --git a/patches/server/0070-Entity-lifespan.patch b/patches/server/0072-Entity-lifespan.patch similarity index 89% rename from patches/server/0070-Entity-lifespan.patch rename to patches/server/0072-Entity-lifespan.patch index ee872d30f..c5ec53c1f 100644 --- a/patches/server/0070-Entity-lifespan.patch +++ b/patches/server/0072-Entity-lifespan.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4319a191f03caa56baeecdc537b61aacfa2291cd..1908af9183d290a1a6815866ba10172d05ff56d1 100644 +index 7a2bc00ee456caf48d3261f065fb1c9e760b813b..f71219cc6805c214a130643144c02332d0df5750 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2747,6 +2747,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2748,6 +2748,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(1.0D))) { // Paper - configurable lenience value for interact range @@ -17,7 +17,7 @@ index 4319a191f03caa56baeecdc537b61aacfa2291cd..1908af9183d290a1a6815866ba10172d private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 99b227dc5940ddc16d41b2e37c4683268b9e4112..1a8b081aae4bbe538eb3230d415583f318ade86f 100644 +index 9010da67e2a20c58195d8a49244d6850468fb153..3e148325f6fa9772134d2954abc39de6a5634e34 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -146,6 +146,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -28,7 +28,7 @@ index 99b227dc5940ddc16d41b2e37c4683268b9e4112..1a8b081aae4bbe538eb3230d415583f3 public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -331,6 +332,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -333,6 +334,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab entityliving = null; } } @@ -36,7 +36,7 @@ index 99b227dc5940ddc16d41b2e37c4683268b9e4112..1a8b081aae4bbe538eb3230d415583f3 this.target = entityliving; return true; // CraftBukkit end -@@ -373,8 +375,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -375,8 +377,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } this.level().getProfiler().pop(); @@ -65,7 +65,7 @@ index 99b227dc5940ddc16d41b2e37c4683268b9e4112..1a8b081aae4bbe538eb3230d415583f3 @Override protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -549,6 +571,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -551,6 +573,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index 99b227dc5940ddc16d41b2e37c4683268b9e4112..1a8b081aae4bbe538eb3230d415583f3 } @Override -@@ -626,6 +649,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -628,6 +651,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,7 +85,7 @@ index 99b227dc5940ddc16d41b2e37c4683268b9e4112..1a8b081aae4bbe538eb3230d415583f3 } @Override -@@ -1743,6 +1771,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1749,6 +1777,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.playAttackSound(); } diff --git a/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 92% rename from patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 5bf308fcd..34b12d1b4 100644 --- a/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 73015adb991322b998aad4b244b2fc2a57c6224c..855b8920eb5119ea6bf4726a9b77e3149779d0b3 100644 +index f9d2cb898e8f19accf30de609b5f0b1ef17fa9c7..7899793cf22f79e4d1acbac052ee273e6b2ad12f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -3034,4 +3034,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3033,4 +3033,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,10 +36,10 @@ index 73015adb991322b998aad4b244b2fc2a57c6224c..855b8920eb5119ea6bf4726a9b77e314 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index dc1bb55a84e1f1277c76dbdd30001080f6a0013e..1bb7f2aed9b23d5738140d236c140f9c508bc748 100644 +index 9ee0ff0a32634cda0fff6bc16df32e47f0edec1c..7dd20ec15b038df76d3f9e34e0f2c90c4659c9e8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -462,6 +462,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -461,6 +461,7 @@ public abstract class LivingEntity extends Entity implements Attackable { double d1 = this.level().getWorldBorder().getDamagePerBlock(); if (d1 > 0.0D) { diff --git a/patches/server/0072-Squid-EAR-immunity.patch b/patches/server/0074-Squid-EAR-immunity.patch similarity index 93% rename from patches/server/0072-Squid-EAR-immunity.patch rename to patches/server/0074-Squid-EAR-immunity.patch index cf9707a83..697697ddb 100644 --- a/patches/server/0072-Squid-EAR-immunity.patch +++ b/patches/server/0074-Squid-EAR-immunity.patch @@ -25,10 +25,10 @@ index 7e416c24a336b53a71b53c020171a32adca6c95c..4ed5b8babbbace9b26659b54c7de395a public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 02be091f2ee12a728fec72c6eaf390eac4c9a806..9bec373c470a4f2bc0f1f4101469ec8be903ab83 100644 +index 378c889b3315fc578629990df361e37baac110d3..ba180127a50b1a1ed155ee4053440074e38adef4 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -381,6 +381,7 @@ public class ActivationRange +@@ -404,6 +404,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/server/0073-Phantoms-burn-in-light.patch b/patches/server/0075-Phantoms-burn-in-light.patch similarity index 100% rename from patches/server/0073-Phantoms-burn-in-light.patch rename to patches/server/0075-Phantoms-burn-in-light.patch diff --git a/patches/server/0074-Configurable-villager-breeding.patch b/patches/server/0076-Configurable-villager-breeding.patch similarity index 93% rename from patches/server/0074-Configurable-villager-breeding.patch rename to patches/server/0076-Configurable-villager-breeding.patch index 1b55370dd..29d4f3d0a 100644 --- a/patches/server/0074-Configurable-villager-breeding.patch +++ b/patches/server/0076-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding 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 aa17159f54402dc2bb0f8336ef79614186f1ddd1..96a140098b467afa9122093a08ebf190ed566a30 100644 +index f083de2448e0e6dfa277c58a082b305cdc1e11e7..37aefffb16c43221e39ef0b41a16968a560968ea 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -780,7 +780,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -782,7 +782,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { diff --git a/patches/server/0075-Redstone-deactivates-spawners.patch b/patches/server/0077-Redstone-deactivates-spawners.patch similarity index 100% rename from patches/server/0075-Redstone-deactivates-spawners.patch rename to patches/server/0077-Redstone-deactivates-spawners.patch diff --git a/patches/server/0076-Totems-work-in-inventory.patch b/patches/server/0078-Totems-work-in-inventory.patch similarity index 94% rename from patches/server/0076-Totems-work-in-inventory.patch rename to patches/server/0078-Totems-work-in-inventory.patch index 867c89e2f..93c98e393 100644 --- a/patches/server/0076-Totems-work-in-inventory.patch +++ b/patches/server/0078-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1bb7f2aed9b23d5738140d236c140f9c508bc748..609260d43c42d9978f5e849b4dd7191fd21a6c32 100644 +index 56d07a0aef9cd1732b5cf10765137730129e5c03..6c3e1ec1058854a5dd4115e26f529624f5e4eef3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1667,6 +1667,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1679,6 +1679,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0079-Add-vindicator-johnny-spawn-chance.patch similarity index 100% rename from patches/server/0077-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0079-Add-vindicator-johnny-spawn-chance.patch diff --git a/patches/server/0078-Dispensers-place-anvils-option.patch b/patches/server/0080-Dispensers-place-anvils-option.patch similarity index 100% rename from patches/server/0078-Dispensers-place-anvils-option.patch rename to patches/server/0080-Dispensers-place-anvils-option.patch diff --git a/patches/server/0079-Allow-anvil-colors.patch b/patches/server/0081-Allow-anvil-colors.patch similarity index 100% rename from patches/server/0079-Allow-anvil-colors.patch rename to patches/server/0081-Allow-anvil-colors.patch diff --git a/patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 100% rename from patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch diff --git a/patches/server/0081-Short-enderman-height.patch b/patches/server/0083-Short-enderman-height.patch similarity index 89% rename from patches/server/0081-Short-enderman-height.patch rename to patches/server/0083-Short-enderman-height.patch index 67a7ca324..426c717d2 100644 --- a/patches/server/0081-Short-enderman-height.patch +++ b/patches/server/0083-Short-enderman-height.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 9d6ca8c6f009cb34fab07cc4d17a6dd5aa45bd12..9cac9f5989cd8f73f247e4a3f901a54c03bc00ef 100644 +index 5a80b1f1168d17ef62d756f8eed751e721f09f79..bad5b622477a637440649ec18ea5a79c321bc523 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -322,7 +322,8 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -324,7 +324,8 @@ public class EntityType implements FeatureElement, EntityTypeT private Component description; @Nullable private ResourceKey lootTable; @@ -19,10 +19,10 @@ index 9d6ca8c6f009cb34fab07cc4d17a6dd5aa45bd12..9cac9f5989cd8f73f247e4a3f901a54c private final FeatureFlagSet requiredFeatures; 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 6306d0452f0bfcb20a90e0f46b34fd7fc0426e10..28b2303ce9459b6038f35e3e470324392753b67f 100644 +index 108dca0b1b97e01fd9cadf4ae330fab770fce0c8..b081ea3f272ec2dba426bf0ebdfbbba1cec718ee 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -422,6 +422,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -428,6 +428,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(source)) { return false; } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage diff --git a/patches/server/0082-Stop-squids-floating-on-top-of-water.patch b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch similarity index 92% rename from patches/server/0082-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0084-Stop-squids-floating-on-top-of-water.patch index 7b842c1ad..b15f5bdc1 100644 --- a/patches/server/0082-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 88fd465aa3e448e36fe519f8f882d2d3225d679f..ffb83e96b070179467ddedbe7d24752752fffbeb 100644 +index c847c522def00e20435d7afc52f33cadf8183289..0dc3ac9fa2a4f30c1df689ac0800eb2ac9661cf5 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4483,6 +4483,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4492,6 +4492,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(delta, this.yRotO, this.yRot); } @@ -19,7 +19,7 @@ index 88fd465aa3e448e36fe519f8f882d2d3225d679f..ffb83e96b070179467ddedbe7d247527 + // Purpur end + public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { - if (this.touchingUnloadedChunk()) { + if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip return false; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java index ef4513f577779ddcfd357420aa65e1b52cf0f388..522dabcf6ec8b19902890718717fc890d430c750 100644 diff --git a/patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch similarity index 100% rename from patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch diff --git a/patches/server/0084-Entities-can-use-portals.patch b/patches/server/0086-Entities-can-use-portals.patch similarity index 93% rename from patches/server/0084-Entities-can-use-portals.patch rename to patches/server/0086-Entities-can-use-portals.patch index 50f822626..54a6d3b09 100644 --- a/patches/server/0084-Entities-can-use-portals.patch +++ b/patches/server/0086-Entities-can-use-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 02e31827de699c6df409fbc3b88f7ded68236e20..51eebbee1c46062b35a2703713f2e1dfafcb0b26 100644 +index 0dc3ac9fa2a4f30c1df689ac0800eb2ac9661cf5..88de6ab4ac4857433c0c96dc4c030e5f4943c1dd 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3266,7 +3266,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3275,7 +3275,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void setAsInsidePortal(Portal portal, BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index 02e31827de699c6df409fbc3b88f7ded68236e20..51eebbee1c46062b35a2703713f2e1df if (this.portalProcess != null && this.portalProcess.isSamePortal(portal)) { this.portalProcess.updateEntryPosition(pos.immutable()); this.portalProcess.setAsInsidePortalThisTick(true); -@@ -3889,7 +3889,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3898,7 +3898,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowVehicles) { diff --git a/patches/server/0085-Customizable-wither-health-and-healing.patch b/patches/server/0087-Customizable-wither-health-and-healing.patch similarity index 94% rename from patches/server/0085-Customizable-wither-health-and-healing.patch rename to patches/server/0087-Customizable-wither-health-and-healing.patch index ddf755e18..8bebdf5cc 100644 --- a/patches/server/0085-Customizable-wither-health-and-healing.patch +++ b/patches/server/0087-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. 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 0e2e7f935deb674bfcbdf4f1ba7de7834ed1c61a..e3ee5d5eb80d689eb77731b3f26d0c314fcc4436 100644 +index 8a4f48956cb0804c0d717783556b97603a1e59b2..0d753a16c77251b421735f9e38202af00baf46f9 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 -@@ -522,8 +522,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -529,8 +529,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } } diff --git a/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch similarity index 98% rename from patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch index a2063f2a7..7ea339b12 100644 --- a/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 2b7f3935b5224709a295b8ed16ac28f6c67b36fc..648aa9ec26ee2291a0caf2c61a3da4429566c343 100644 +index ef645bf72db80a0d085c8bca29bf67cab189ffde..98e369bcd556306ec380600b4c7385e240cef06c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -520,7 +520,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. diff --git a/patches/server/0087-Raid-cooldown-setting.patch b/patches/server/0089-Raid-cooldown-setting.patch similarity index 100% rename from patches/server/0087-Raid-cooldown-setting.patch rename to patches/server/0089-Raid-cooldown-setting.patch diff --git a/patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0090-Despawn-rate-config-options-per-projectile-type.patch similarity index 100% rename from patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0090-Despawn-rate-config-options-per-projectile-type.patch diff --git a/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0091-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 100% rename from patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0091-Add-option-to-disable-zombie-aggressiveness-towards-.patch diff --git a/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0092-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/server/0092-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/server/0091-Flying-squids-Oh-my.patch b/patches/server/0093-Flying-squids-Oh-my.patch similarity index 100% rename from patches/server/0091-Flying-squids-Oh-my.patch rename to patches/server/0093-Flying-squids-Oh-my.patch diff --git a/patches/server/0092-Infinity-bow-settings.patch b/patches/server/0094-Infinity-bow-settings.patch similarity index 100% rename from patches/server/0092-Infinity-bow-settings.patch rename to patches/server/0094-Infinity-bow-settings.patch diff --git a/patches/server/0093-Configurable-daylight-cycle.patch b/patches/server/0095-Configurable-daylight-cycle.patch similarity index 93% rename from patches/server/0093-Configurable-daylight-cycle.patch rename to patches/server/0095-Configurable-daylight-cycle.patch index 9ca36820b..d4b31fb83 100644 --- a/patches/server/0093-Configurable-daylight-cycle.patch +++ b/patches/server/0095-Configurable-daylight-cycle.patch @@ -18,10 +18,10 @@ index 76ef195a5074006b009acd9cc1744667c6aecbb9..659577549e132754281df76a7a1bfd88 public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f2d977a4a984e8354cd09e756362c062e25cd834..545e4d618a06d100a85731418222acf0e566e1c7 100644 +index 8c3712030d2421f014bf757dccc5cdfeeb1f9d23..8c63e089baaed5d99df05db34f53886f6e568424 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1777,7 +1777,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> { @@ -362,7 +362,7 @@ index b6a4b4e66ca67e4dcb4b14a13ab6586a94e1b020..b0f8115b328eda1e3571051870b5310c protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); 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 691f5020df77b01523d1e292be40552089e2f538..1de70d3faddb58df1180b500195b9167b6c9d644 100644 +index ca68973e851ae933015d5dbcbca7b48f872ddd07..2fd6ff9d9dc603020114cc6ab8eb28c9d09e448c 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 @@ -108,6 +108,11 @@ public class Goat extends Animal { @@ -522,7 +522,7 @@ index 964d60cd69e33bf77a415a702ef93fbe964eb8b3..8c233a90d07db7959b778a84c4ed0589 BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); 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 66ebc75ddfd944277e7f7be43ed0d215eb2030f1..1bd16c9243df4500b9d965ba260f7dd1382261ea 100644 +index cd6428d0d61f68eafa8829fc21084586447cd61e..eb4a2e57ee9bddacef184e81167f8ee32c63c63f 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 @@ -113,6 +113,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { diff --git a/patches/server/0099-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0101-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 100% rename from patches/server/0099-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/server/0101-Apply-display-names-from-item-forms-of-entities-to-e.patch diff --git a/patches/server/0100-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0102-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 100% rename from patches/server/0100-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/server/0102-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch diff --git a/patches/server/0101-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0103-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 93% rename from patches/server/0101-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/server/0103-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index 0732e3833..b35ca6933 100644 --- a/patches/server/0101-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0103-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch @@ -8,10 +8,10 @@ This should help to reduce the amount of dirt, gravel, grass, and etc. that Endermen like to randomly place all over the world. 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 28b2303ce9459b6038f35e3e470324392753b67f..f969164a67f98f5a9925f98a9595f0b555ad47fc 100644 +index b081ea3f272ec2dba426bf0ebdfbbba1cec718ee..3348b5a9e4e00ef7f4dabe10d0fe0a9c0456dbd7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -481,7 +481,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -487,7 +487,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { diff --git a/patches/server/0102-Add-configurable-snowball-damage.patch b/patches/server/0104-Add-configurable-snowball-damage.patch similarity index 100% rename from patches/server/0102-Add-configurable-snowball-damage.patch rename to patches/server/0104-Add-configurable-snowball-damage.patch diff --git a/patches/server/0103-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0105-Changeable-Mob-Left-Handed-Chance.patch similarity index 91% rename from patches/server/0103-Changeable-Mob-Left-Handed-Chance.patch rename to patches/server/0105-Changeable-Mob-Left-Handed-Chance.patch index 077927ca6..efe98a596 100644 --- a/patches/server/0103-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0105-Changeable-Mob-Left-Handed-Chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Changeable Mob Left Handed Chance diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 1a8b081aae4bbe538eb3230d415583f318ade86f..4bcd6dc324b49165ae4ad6ab93e46ecd5445557b 100644 +index 3e148325f6fa9772134d2954abc39de6a5634e34..eff98dd7a048c107420fe6fa76179592937cdf1d 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1431,7 +1431,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1437,7 +1437,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab attributemodifiable.addPermanentModifier(new AttributeModifier(Mob.RANDOM_SPAWN_BONUS_ID, randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.ADD_MULTIPLIED_BASE)); } diff --git a/patches/server/0104-Add-boat-fall-damage-config.patch b/patches/server/0106-Add-boat-fall-damage-config.patch similarity index 100% rename from patches/server/0104-Add-boat-fall-damage-config.patch rename to patches/server/0106-Add-boat-fall-damage-config.patch diff --git a/patches/server/0105-Snow-Golem-rate-of-fire-config.patch b/patches/server/0107-Snow-Golem-rate-of-fire-config.patch similarity index 100% rename from patches/server/0105-Snow-Golem-rate-of-fire-config.patch rename to patches/server/0107-Snow-Golem-rate-of-fire-config.patch diff --git a/patches/server/0106-EMC-Configurable-disable-give-dropping.patch b/patches/server/0108-EMC-Configurable-disable-give-dropping.patch similarity index 100% rename from patches/server/0106-EMC-Configurable-disable-give-dropping.patch rename to patches/server/0108-EMC-Configurable-disable-give-dropping.patch diff --git a/patches/server/0107-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0109-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 98% rename from patches/server/0107-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/server/0109-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index b24749cd8..642c84cd6 100644 --- a/patches/server/0107-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0109-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -136,10 +136,10 @@ index a0e0692d17760f440fe81d52887284c787e562db..ab9bebc07b5228dbc0d3ba4b0f7d1bbe brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { 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 96a140098b467afa9122093a08ebf190ed566a30..3d34f4ab1e81645d45441589c253544900fc8ec7 100644 +index 37aefffb16c43221e39ef0b41a16968a560968ea..730327d560075e28f0ba316c64311297a474f0ca 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -224,7 +224,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -226,7 +226,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F)); } else { brain.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -148,7 +148,7 @@ index 96a140098b467afa9122093a08ebf190ed566a30..3d34f4ab1e81645d45441589c2535449 } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -973,6 +973,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -975,6 +975,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean hasFarmSeeds() { return this.getInventory().hasAnyMatching((itemstack) -> { diff --git a/patches/server/0108-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0110-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 100% rename from patches/server/0108-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/server/0110-Toggle-for-Zombified-Piglin-death-always-counting-as.patch diff --git a/patches/server/0109-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0111-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 100% rename from patches/server/0109-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/server/0111-Configurable-chance-for-wolves-to-spawn-rabid.patch diff --git a/patches/server/0110-Configurable-default-collar-color.patch b/patches/server/0112-Configurable-default-collar-color.patch similarity index 100% rename from patches/server/0110-Configurable-default-collar-color.patch rename to patches/server/0112-Configurable-default-collar-color.patch diff --git a/patches/server/0111-Phantom-flames-on-swoop.patch b/patches/server/0113-Phantom-flames-on-swoop.patch similarity index 100% rename from patches/server/0111-Phantom-flames-on-swoop.patch rename to patches/server/0113-Phantom-flames-on-swoop.patch diff --git a/patches/server/0112-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0114-Option-for-chests-to-open-even-with-a-solid-block-on.patch similarity index 100% rename from patches/server/0112-Option-for-chests-to-open-even-with-a-solid-block-on.patch rename to patches/server/0114-Option-for-chests-to-open-even-with-a-solid-block-on.patch diff --git a/patches/server/0113-Implement-TPSBar.patch b/patches/server/0115-Implement-TPSBar.patch similarity index 97% rename from patches/server/0113-Implement-TPSBar.patch rename to patches/server/0115-Implement-TPSBar.patch index 020515e44..1c93fa29d 100644 --- a/patches/server/0113-Implement-TPSBar.patch +++ b/patches/server/0115-Implement-TPSBar.patch @@ -17,10 +17,10 @@ index 38a345901a743f5ddac18ba876d5245c5c11f111..c7b7cc0d9ce589b5a0600e9b8c46b2e5 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 545e4d618a06d100a85731418222acf0e566e1c7..f21395bfb83a80dd0b3197870ef162cb5669cbf9 100644 +index 8c63e089baaed5d99df05db34f53886f6e568424..885b63225cc45382240b117ccdacbd8dc7d8b4c2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1137,6 +1137,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop byteAllowed) { diff --git a/patches/server/0116-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0118-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/server/0116-Full-netherite-armor-grants-fire-resistance.patch rename to patches/server/0118-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/server/0117-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0119-Add-mobGriefing-bypass-to-everything-affected.patch similarity index 97% rename from patches/server/0117-Add-mobGriefing-bypass-to-everything-affected.patch rename to patches/server/0119-Add-mobGriefing-bypass-to-everything-affected.patch index dfe0dad47..a08c4a14b 100644 --- a/patches/server/0117-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0119-Add-mobGriefing-bypass-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ffe1e4fdd908c8825e78c6e1c9aac6683c10a13a..2c47a6189030a06483db45e47d38a860472da6cc 100644 +index ff4069d4b33a7e569867241162b7c6538327a883..2dd67924ab1a21c7115f8b3b06e8ce8873d13c91 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1845,7 +1845,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1857,7 +1857,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index ffe1e4fdd908c8825e78c6e1c9aac6683c10a13a..2c47a6189030a06483db45e47d38a860 BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 4bcd6dc324b49165ae4ad6ab93e46ecd5445557b..d5c2b878abe44ee6fe856771c97759b2d0e51681 100644 +index eff98dd7a048c107420fe6fa76179592937cdf1d..86ae2cb0e398f4e85c90ca5b20dce8eacde7d71f 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -705,7 +705,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -707,7 +707,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public void aiStep() { super.aiStep(); this.level().getProfiler().push("looting"); @@ -144,10 +144,10 @@ index cc5fd3d020187adcbd20d4947beb353b291bdfd1..f80319504d70580f977acccd935af489 // flag1 = this.level().removeBlock(blockposition, false) || flag1; flag1 = true; 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 e3ee5d5eb80d689eb77731b3f26d0c314fcc4436..d75d331355129edb975fe5adc585e35852d484da 100644 +index 0d753a16c77251b421735f9e38202af00baf46f9..24677d1a9750f5757a983c4f6ecef42a442932c6 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 -@@ -495,7 +495,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -502,7 +502,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.destroyBlocksTick > 0) { --this.destroyBlocksTick; @@ -157,10 +157,10 @@ index e3ee5d5eb80d689eb77731b3f26d0c314fcc4436..d75d331355129edb975fe5adc585e358 j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); 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 f969164a67f98f5a9925f98a9595f0b555ad47fc..2ef35e21c20ec19e1af0f7380d8c36fbf6948e47 100644 +index 3348b5a9e4e00ef7f4dabe10d0fe0a9c0456dbd7..e71db58a2824d0a6a8df1a3d13ad5ac14604ad99 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -529,7 +529,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -535,7 +535,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -177,7 +177,7 @@ index f969164a67f98f5a9925f98a9595f0b555ad47fc..2ef35e21c20ec19e1af0f7380d8c36fb } @Override -@@ -575,7 +583,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -581,7 +589,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -243,10 +243,10 @@ index e59ee35faa8b4ec35021074ce67666569c27da63..4325dc4889fb4c514798b85ef4d06725 BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection); BlockState iblockdata = this.mob.level().getBlockState(blockposition); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 1d66809216703a9ef9129f8e31887658726ad9ce..1084252852676a747cc05849fe2567dbcbc6a359 100644 +index 65bb3045cd74ef1695eb8c1edd71f8b72b2d9378..ed312ed8c668ee6b02ae6e89b5a44bb4fe6d4b48 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 -@@ -412,7 +412,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -413,7 +413,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ItemStack stack) { @@ -284,10 +284,10 @@ index 28a65f2a9ef441ae96a7a635e0695b14ce2ee367..7b6c58a31d37896daccb5f570d3cb924 // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); 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 de64de5d1328d3e0826c9990eb7c7eca5088cb9c..e8e1fe11d6c9042979345941833fa2895000c39a 100644 +index 7c8665b813909e0bd5632d88486728f3c28cb0b3..99ed1be743cd63171be4c5a2f9e973756052cea6 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -367,7 +367,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -397,7 +397,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { public boolean mayInteract(Level world, BlockPos pos) { Entity entity = this.getOwner(); diff --git a/patches/server/0118-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0120-Config-to-allow-Note-Block-sounds-when-blocked.patch similarity index 100% rename from patches/server/0118-Config-to-allow-Note-Block-sounds-when-blocked.patch rename to patches/server/0120-Config-to-allow-Note-Block-sounds-when-blocked.patch diff --git a/patches/server/0119-Add-EntityTeleportHinderedEvent.patch b/patches/server/0121-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/server/0119-Add-EntityTeleportHinderedEvent.patch rename to patches/server/0121-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/server/0120-Farmland-trampling-changes.patch b/patches/server/0122-Farmland-trampling-changes.patch similarity index 100% rename from patches/server/0120-Farmland-trampling-changes.patch rename to patches/server/0122-Farmland-trampling-changes.patch diff --git a/patches/server/0121-Movement-options-for-armor-stands.patch b/patches/server/0123-Movement-options-for-armor-stands.patch similarity index 96% rename from patches/server/0121-Movement-options-for-armor-stands.patch rename to patches/server/0123-Movement-options-for-armor-stands.patch index a0edc4b5d..0796e5a52 100644 --- a/patches/server/0121-Movement-options-for-armor-stands.patch +++ b/patches/server/0123-Movement-options-for-armor-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 51eebbee1c46062b35a2703713f2e1dfafcb0b26..885b0385aa78ffba8f2f7e0d0d3d03e457512ef3 100644 +index 88de6ab4ac4857433c0c96dc4c030e5f4943c1dd..808c533a0092ca659bad32f400d83a869bcf6a64 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1926,7 +1926,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1935,7 +1935,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } diff --git a/patches/server/0122-Fix-stuck-in-portals.patch b/patches/server/0124-Fix-stuck-in-portals.patch similarity index 92% rename from patches/server/0122-Fix-stuck-in-portals.patch rename to patches/server/0124-Fix-stuck-in-portals.patch index 925308f75..50100488c 100644 --- a/patches/server/0122-Fix-stuck-in-portals.patch +++ b/patches/server/0124-Fix-stuck-in-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 53d02ab56e3d3f15147d76861bd498d456f59d13..8f7ab2445ff9ab74c6de0f29218a231d91998adf 100644 +index 97e05432626ae78b3ac91d41bbe0784c61d3d184..578809e48dc52dcde5866672291d70168a09811c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1425,6 +1425,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1424,6 +1424,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); // CraftBukkit end @@ -17,10 +17,10 @@ index 53d02ab56e3d3f15147d76861bd498d456f59d13..8f7ab2445ff9ab74c6de0f29218a231d this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 885b0385aa78ffba8f2f7e0d0d3d03e457512ef3..c4df88e56216209f4acd0d2441d8973bd6bce5f8 100644 +index 808c533a0092ca659bad32f400d83a869bcf6a64..73cac6256baa32b0dbd47f06444adda2fc4e0fc1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3263,13 +3263,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3272,13 +3272,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } diff --git a/patches/server/0123-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0125-Toggle-for-water-sensitive-mob-damage.patch similarity index 99% rename from patches/server/0123-Toggle-for-water-sensitive-mob-damage.patch rename to patches/server/0125-Toggle-for-water-sensitive-mob-damage.patch index b551f326c..4c7d3f885 100644 --- a/patches/server/0123-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0125-Toggle-for-water-sensitive-mob-damage.patch @@ -21,7 +21,7 @@ index 4cd57672c548950cb4e0aa97af75ecca84be6823..70e3d583f7a039a5c67428ce9e8beb19 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; 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 04df50970188cf6b9fbdcc1e99ea6cf8a0beee59..9bb113741bae68b865109549a4025ddf1008103e 100644 +index 115314cf19f8ed8f1c115f95438dee5cbe329900..3d556fb56977f3a75702c43e933340155e3e1cf3 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -278,6 +278,11 @@ public class Bat extends AmbientCreature { @@ -411,7 +411,7 @@ index 143717d64651ffd75124973ca7a15fc1fd007da3..b6602362b7b450749ae1768572658b75 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 05ffcccf19ca07285d821de41909cade42244a08..c241bf3c18c11008a375ab9f5c3d158866d64b95 100644 +index e4c60befe0e642f6f93beab286af1373ceb4d4c8..43e22bb6970159130d4048d0bd186c616b8d3ee2 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 @@ -125,6 +125,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { return this.modelRotationValues; 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 1de70d3faddb58df1180b500195b9167b6c9d644..9fba034ed863d1dc1ee5fb7cf09650382481dbc7 100644 +index 2fd6ff9d9dc603020114cc6ab8eb28c9d09e448c..8272b68f05723caceca806f2dd5fa00c6fd50e6e 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 @@ -113,6 +113,11 @@ public class Goat extends Animal { @@ -571,7 +571,7 @@ index f80319504d70580f977acccd935af489f7d8f712..0d0f999ab361db9a839bc7e57bfeca21 return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } 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 d75d331355129edb975fe5adc585e35852d484da..714223f131cb4ece988ffacbfc90bb9d7d143636 100644 +index 24677d1a9750f5757a983c4f6ecef42a442932c6..6fedac6f92193d7031b6265f897d9688fd2c8780 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 @@ -122,6 +122,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -673,7 +673,7 @@ index 986a0f75dd8ac3d36e827d88e1e8e6a0f755aab7..795bf6c37362382124ca1ea8ce2a294b return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 2ef35e21c20ec19e1af0f7380d8c36fbf6948e47..21b2709f96b49c77807c9054843505a4fd0155f0 100644 +index e71db58a2824d0a6a8df1a3d13ad5ac14604ad99..d4360a62cc2514dafc02749e49674213db65cc85 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -92,7 +92,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -1119,7 +1119,7 @@ index 2756319fd1e53eca6a3dfa094d7c669014c383e9..f2081f3b4a4bbda071cfc5c714d887ff public boolean jockeyOnlyBaby() { return level().purpurConfig.zombifiedPiglinJockeyOnlyBaby; 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 1bd16c9243df4500b9d965ba260f7dd1382261ea..4c6db2e685b204e55b8be7bfb666d25ae81c17c7 100644 +index eb4a2e57ee9bddacef184e81167f8ee32c63c63f..563af99f4b17b38e074fbc752b41a8c7fb9f5a01 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 @@ -118,6 +118,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1135,7 +1135,7 @@ index 1bd16c9243df4500b9d965ba260f7dd1382261ea..4c6db2e685b204e55b8be7bfb666d25a public boolean canBeLeashed() { return true; 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 1084252852676a747cc05849fe2567dbcbc6a359..d8cf4a12964d77f9e9e6652a827863da77b37750 100644 +index ed312ed8c668ee6b02ae6e89b5a44bb4fe6d4b48..bb85a7dfbb4225e0f1d1d63212928bbb4b137a78 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 @@ -116,6 +116,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1167,10 +1167,10 @@ index ea62ab46518647759bd8ce3e4f3d5ced680414bd..db8c029799215223d7a594dbb945d6aa return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } 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 3d34f4ab1e81645d45441589c253544900fc8ec7..5ae9fd76b7c654887171a68e182b783a5192b9e2 100644 +index 730327d560075e28f0ba316c64311297a474f0ca..a717443f894d1e30efed61944f45e991902d1fa4 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -190,6 +190,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -192,6 +192,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); } diff --git a/patches/server/0124-Config-to-always-tame-in-Creative.patch b/patches/server/0126-Config-to-always-tame-in-Creative.patch similarity index 100% rename from patches/server/0124-Config-to-always-tame-in-Creative.patch rename to patches/server/0126-Config-to-always-tame-in-Creative.patch diff --git a/patches/server/0125-End-crystal-explosion-options.patch b/patches/server/0127-End-crystal-explosion-options.patch similarity index 100% rename from patches/server/0125-End-crystal-explosion-options.patch rename to patches/server/0127-End-crystal-explosion-options.patch diff --git a/patches/server/0126-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0128-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch similarity index 96% rename from patches/server/0126-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch rename to patches/server/0128-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index d1667f73d..bd8d87582 100644 --- a/patches/server/0126-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0128-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -17,10 +17,10 @@ index 0d0f999ab361db9a839bc7e57bfeca21aed4c523..573ec75b5fed1c3d30aa9dc64cf3a8a7 } 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 714223f131cb4ece988ffacbfc90bb9d7d143636..3cc6db1e0a657468282caaba0d9dcceac5b53abf 100644 +index 6fedac6f92193d7031b6265f897d9688fd2c8780..8809b88dec7beffa569de6832f5b458116b143cc 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 -@@ -732,6 +732,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -739,6 +739,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected boolean canRide(Entity entity) { diff --git a/patches/server/0127-Dont-run-with-scissors.patch b/patches/server/0129-Dont-run-with-scissors.patch similarity index 97% rename from patches/server/0127-Dont-run-with-scissors.patch rename to patches/server/0129-Dont-run-with-scissors.patch index ef398cf11..1d17060ff 100644 --- a/patches/server/0127-Dont-run-with-scissors.patch +++ b/patches/server/0129-Dont-run-with-scissors.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Dont run with scissors! inspired by https://modrinth.com/mod/dont-run-with-scissors diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ea4ac42372919722109cd85c213877b892e8fcf9..f4392eb11dfba8b7423b6e917a38fa44be5c35fa 100644 +index e327b9400bf29b6712e6d559f174cd31238db515..435ab19d1fad30cd75aa705861760674b09ea0ac 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1604,6 +1604,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1605,6 +1605,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -23,7 +23,7 @@ index ea4ac42372919722109cd85c213877b892e8fcf9..f4392eb11dfba8b7423b6e917a38fa44 this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1631,6 +1638,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1632,6 +1639,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } diff --git a/patches/server/0128-One-Punch-Man.patch b/patches/server/0130-One-Punch-Man.patch similarity index 95% rename from patches/server/0128-One-Punch-Man.patch rename to patches/server/0130-One-Punch-Man.patch index 98ed598f2..213903a50 100644 --- a/patches/server/0128-One-Punch-Man.patch +++ b/patches/server/0130-One-Punch-Man.patch @@ -6,10 +6,10 @@ Subject: [PATCH] One Punch Man! inspired by https://modrinth.com/mod/creative-one-punch diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index b07d0fc6cbcf209f5c69f4b43011d3f7182aa16c..fd50a55934d4bb98ad4a1b0d0f6339cdd98b4e03 100644 +index 6c25dabd8a70b788bc2709c272988cadc9e0b089..1cd5def5b2c976ddb63e0b323be9920232ea016f 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1429,6 +1429,24 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1441,6 +1441,24 @@ public abstract class LivingEntity extends Entity implements Attackable { this.stopSleeping(); } diff --git a/patches/server/0129-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0131-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 100% rename from patches/server/0129-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/server/0131-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch diff --git a/patches/server/0130-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 93% rename from patches/server/0130-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch index 4eb24471d..42741c643 100644 --- a/patches/server/0130-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index c653e8a917b060dd63357541970caf5d8771d66b..b68b3145656b65d1f270abb36f704d55d04d74c2 100644 +index 578809e48dc52dcde5866672291d70168a09811c..750f5304a9210ce56ec42a2e0d311717bd15d394 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1530,7 +1530,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1529,7 +1529,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return entitymonster.isPreventingPlayerRest(this); }); diff --git a/patches/server/0131-Add-back-player-spawned-endermite-API.patch b/patches/server/0133-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/server/0131-Add-back-player-spawned-endermite-API.patch rename to patches/server/0133-Add-back-player-spawned-endermite-API.patch diff --git a/patches/server/0132-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch similarity index 97% rename from patches/server/0132-Config-Enderman-aggressiveness-towards-Endermites.patch rename to patches/server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch index 240a62d6e..0e66a2e51 100644 --- a/patches/server/0132-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites 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 21b2709f96b49c77807c9054843505a4fd0155f0..61602040352fe2eacd646ec3dc6728ea733d4ca2 100644 +index d4360a62cc2514dafc02749e49674213db65cc85..22583cdb173862b021c9701d26171ca337796557 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -132,7 +132,7 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/patches/server/0133-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 96% rename from patches/server/0133-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 819e17c6c..8637e6d6c 100644 --- a/patches/server/0133-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,7 +7,7 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! 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 61602040352fe2eacd646ec3dc6728ea733d4ca2..a68f63b73785e7db68127151aca5138da4d88654 100644 +index 22583cdb173862b021c9701d26171ca337796557..65c7bf88071dda62034d71b6a83caedd49d0902a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -269,7 +269,7 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/patches/server/0134-Tick-fluids-config.patch b/patches/server/0136-Tick-fluids-config.patch similarity index 100% rename from patches/server/0134-Tick-fluids-config.patch rename to patches/server/0136-Tick-fluids-config.patch diff --git a/patches/server/0135-Config-to-disable-Llama-caravans.patch b/patches/server/0137-Config-to-disable-Llama-caravans.patch similarity index 100% rename from patches/server/0135-Config-to-disable-Llama-caravans.patch rename to patches/server/0137-Config-to-disable-Llama-caravans.patch diff --git a/patches/server/0136-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0138-Config-to-make-Creepers-explode-on-death.patch similarity index 100% rename from patches/server/0136-Config-to-make-Creepers-explode-on-death.patch rename to patches/server/0138-Config-to-make-Creepers-explode-on-death.patch diff --git a/patches/server/0137-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0139-Configurable-ravager-griefable-blocks-list.patch similarity index 100% rename from patches/server/0137-Configurable-ravager-griefable-blocks-list.patch rename to patches/server/0139-Configurable-ravager-griefable-blocks-list.patch diff --git a/patches/server/0138-Sneak-to-bulk-process-composter.patch b/patches/server/0140-Sneak-to-bulk-process-composter.patch similarity index 100% rename from patches/server/0138-Sneak-to-bulk-process-composter.patch rename to patches/server/0140-Sneak-to-bulk-process-composter.patch diff --git a/patches/server/0139-Config-for-skipping-night.patch b/patches/server/0141-Config-for-skipping-night.patch similarity index 96% rename from patches/server/0139-Config-for-skipping-night.patch rename to patches/server/0141-Config-for-skipping-night.patch index a7ad06b22..64a06d47d 100644 --- a/patches/server/0139-Config-for-skipping-night.patch +++ b/patches/server/0141-Config-for-skipping-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index ce5da7fc2d94a4b54e2a33de1e3ac629e4ed80bc..0d690ba8f752cc95812da2cad5b7c297b0289b30 100644 +index a13ad5fd51e6c5643955b228c2411d60ff24d02b..9937cdc35114e5e23d57425267c956c50b843446 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -661,7 +661,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. diff --git a/patches/server/0140-Add-config-for-villager-trading.patch b/patches/server/0142-Add-config-for-villager-trading.patch similarity index 96% rename from patches/server/0140-Add-config-for-villager-trading.patch rename to patches/server/0142-Add-config-for-villager-trading.patch index ae99005c3..e37ca29c7 100644 --- a/patches/server/0140-Add-config-for-villager-trading.patch +++ b/patches/server/0142-Add-config-for-villager-trading.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for villager trading 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 5ae9fd76b7c654887171a68e182b783a5192b9e2..77fc9ca8d4a72cdb7db51297a13808f46e497126 100644 +index a717443f894d1e30efed61944f45e991902d1fa4..671d1dafbfe2f8ba24096f78e2661014d00a5e09 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -374,6 +374,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -376,6 +376,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (level().purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur diff --git a/patches/server/0141-Drowning-Settings.patch b/patches/server/0143-Drowning-Settings.patch similarity index 89% rename from patches/server/0141-Drowning-Settings.patch rename to patches/server/0143-Drowning-Settings.patch index ff4b29f68..49cf59169 100644 --- a/patches/server/0141-Drowning-Settings.patch +++ b/patches/server/0143-Drowning-Settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Drowning Settings diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index d1a00b9881f56d4c1abae4d3a5759dafbb07b864..f8342a0254be24dd74846734977a19e349b58b11 100644 +index 73cac6256baa32b0dbd47f06444adda2fc4e0fc1..cc4bb21903a44a7a06176274bfdaddd3626f78c7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3482,7 +3482,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3491,7 +3491,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -18,10 +18,10 @@ index d1a00b9881f56d4c1abae4d3a5759dafbb07b864..f8342a0254be24dd74846734977a19e3 public int getAirSupply() { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index fd50a55934d4bb98ad4a1b0d0f6339cdd98b4e03..d076f7f42e98ca240c169e1c165097bf4c3f46e8 100644 +index 1cd5def5b2c976ddb63e0b323be9920232ea016f..0302585bd2d024aef9414b7b99c70831336194c5 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -474,7 +474,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -473,7 +473,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -30,7 +30,7 @@ index fd50a55934d4bb98ad4a1b0d0f6339cdd98b4e03..d076f7f42e98ca240c169e1c165097bf this.setAirSupply(0); Vec3 vec3d = this.getDeltaMovement(); -@@ -486,7 +486,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -485,7 +485,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.level().addParticle(ParticleTypes.BUBBLE, this.getX() + d2, this.getY() + d3, this.getZ() + d4, vec3d.x, vec3d.y, vec3d.z); } diff --git a/patches/server/0142-Break-individual-slabs-when-sneaking.patch b/patches/server/0144-Break-individual-slabs-when-sneaking.patch similarity index 100% rename from patches/server/0142-Break-individual-slabs-when-sneaking.patch rename to patches/server/0144-Break-individual-slabs-when-sneaking.patch diff --git a/patches/server/0143-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch similarity index 100% rename from patches/server/0143-Config-to-disable-hostile-mob-spawn-on-ice.patch rename to patches/server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch diff --git a/patches/server/0144-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch similarity index 100% rename from patches/server/0144-Config-to-show-Armor-Stand-arms-on-spawn.patch rename to patches/server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch diff --git a/patches/server/0145-Option-to-make-doors-require-redstone.patch b/patches/server/0147-Option-to-make-doors-require-redstone.patch similarity index 100% rename from patches/server/0145-Option-to-make-doors-require-redstone.patch rename to patches/server/0147-Option-to-make-doors-require-redstone.patch diff --git a/patches/server/0146-Config-to-allow-unsafe-enchants.patch b/patches/server/0148-Config-to-allow-unsafe-enchants.patch similarity index 100% rename from patches/server/0146-Config-to-allow-unsafe-enchants.patch rename to patches/server/0148-Config-to-allow-unsafe-enchants.patch diff --git a/patches/server/0147-Configurable-sponge-absorption.patch b/patches/server/0149-Configurable-sponge-absorption.patch similarity index 100% rename from patches/server/0147-Configurable-sponge-absorption.patch rename to patches/server/0149-Configurable-sponge-absorption.patch diff --git a/patches/server/0148-Projectile-offset-config.patch b/patches/server/0150-Projectile-offset-config.patch similarity index 100% rename from patches/server/0148-Projectile-offset-config.patch rename to patches/server/0150-Projectile-offset-config.patch diff --git a/patches/server/0149-Config-for-powered-rail-activation-distance.patch b/patches/server/0151-Config-for-powered-rail-activation-distance.patch similarity index 100% rename from patches/server/0149-Config-for-powered-rail-activation-distance.patch rename to patches/server/0151-Config-for-powered-rail-activation-distance.patch diff --git a/patches/server/0150-Piglin-portal-spawn-modifier.patch b/patches/server/0152-Piglin-portal-spawn-modifier.patch similarity index 100% rename from patches/server/0150-Piglin-portal-spawn-modifier.patch rename to patches/server/0152-Piglin-portal-spawn-modifier.patch diff --git a/patches/server/0151-Config-to-change-max-number-of-bees.patch b/patches/server/0153-Config-to-change-max-number-of-bees.patch similarity index 100% rename from patches/server/0151-Config-to-change-max-number-of-bees.patch rename to patches/server/0153-Config-to-change-max-number-of-bees.patch diff --git a/patches/server/0152-Config-for-wither-explosion-radius.patch b/patches/server/0154-Config-for-wither-explosion-radius.patch similarity index 100% rename from patches/server/0152-Config-for-wither-explosion-radius.patch rename to patches/server/0154-Config-for-wither-explosion-radius.patch diff --git a/patches/server/0153-Gamemode-extra-permissions.patch b/patches/server/0155-Gamemode-extra-permissions.patch similarity index 100% rename from patches/server/0153-Gamemode-extra-permissions.patch rename to patches/server/0155-Gamemode-extra-permissions.patch diff --git a/patches/server/0154-Configurable-piston-push-limit.patch b/patches/server/0156-Configurable-piston-push-limit.patch similarity index 100% rename from patches/server/0154-Configurable-piston-push-limit.patch rename to patches/server/0156-Configurable-piston-push-limit.patch diff --git a/patches/server/0155-Configurable-broadcast-settings.patch b/patches/server/0157-Configurable-broadcast-settings.patch similarity index 97% rename from patches/server/0155-Configurable-broadcast-settings.patch rename to patches/server/0157-Configurable-broadcast-settings.patch index 1389a180d..eb267abeb 100644 --- a/patches/server/0155-Configurable-broadcast-settings.patch +++ b/patches/server/0157-Configurable-broadcast-settings.patch @@ -17,7 +17,7 @@ index b286b157bba78021efa18f01bc91b067b0bd5874..fc87e3cfff1221a6cbaf3463ce972870 // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index b68b3145656b65d1f270abb36f704d55d04d74c2..147cc53d0c0e226fc78a63e4ff83feac48f2b749 100644 +index c967e1733600a7bdce478aa6b9653bc66b14d462..52e58daa13eb020ed43ed01c84e73bb0346fc77d 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1082,6 +1082,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple diff --git a/patches/server/0156-Configurable-mob-blindness.patch b/patches/server/0158-Configurable-mob-blindness.patch similarity index 95% rename from patches/server/0156-Configurable-mob-blindness.patch rename to patches/server/0158-Configurable-mob-blindness.patch index a9c5dc55e..9c07e0b58 100644 --- a/patches/server/0156-Configurable-mob-blindness.patch +++ b/patches/server/0158-Configurable-mob-blindness.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Configurable mob blindness Ported from https://github.com/raltsmc/mobblindness diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index d076f7f42e98ca240c169e1c165097bf4c3f46e8..d213e299d7bdba4161bd1a2fee9b1042a561abc0 100644 +index 0302585bd2d024aef9414b7b99c70831336194c5..0b488f45c7f259ced70004909077bc5a15191580 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1043,6 +1043,17 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1042,6 +1042,17 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entitytypes == EntityType.SKELETON && itemstack.is(Items.SKELETON_SKULL) || entitytypes == EntityType.ZOMBIE && itemstack.is(Items.ZOMBIE_HEAD) || entitytypes == EntityType.PIGLIN && itemstack.is(Items.PIGLIN_HEAD) || entitytypes == EntityType.PIGLIN_BRUTE && itemstack.is(Items.PIGLIN_HEAD) || entitytypes == EntityType.CREEPER && itemstack.is(Items.CREEPER_HEAD)) { d0 *= 0.5D; } diff --git a/patches/server/0157-Hide-hidden-players-from-entity-selector.patch b/patches/server/0159-Hide-hidden-players-from-entity-selector.patch similarity index 100% rename from patches/server/0157-Hide-hidden-players-from-entity-selector.patch rename to patches/server/0159-Hide-hidden-players-from-entity-selector.patch diff --git a/patches/server/0158-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch similarity index 100% rename from patches/server/0158-Config-for-health-to-impact-Creeper-explosion-radius.patch rename to patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch diff --git a/patches/server/0159-Iron-golem-calm-anger-options.patch b/patches/server/0161-Iron-golem-calm-anger-options.patch similarity index 100% rename from patches/server/0159-Iron-golem-calm-anger-options.patch rename to patches/server/0161-Iron-golem-calm-anger-options.patch diff --git a/patches/server/0160-Breedable-parrots.patch b/patches/server/0162-Breedable-parrots.patch similarity index 100% rename from patches/server/0160-Breedable-parrots.patch rename to patches/server/0162-Breedable-parrots.patch diff --git a/patches/server/0161-Configurable-powered-rail-boost-modifier.patch b/patches/server/0163-Configurable-powered-rail-boost-modifier.patch similarity index 100% rename from patches/server/0161-Configurable-powered-rail-boost-modifier.patch rename to patches/server/0163-Configurable-powered-rail-boost-modifier.patch diff --git a/patches/server/0162-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch similarity index 100% rename from patches/server/0162-Add-config-change-multiplier-critical-damage-value.patch rename to patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch diff --git a/patches/server/0163-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch similarity index 100% rename from patches/server/0163-Option-to-disable-dragon-egg-teleporting.patch rename to patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch diff --git a/patches/server/0164-Config-for-unverified-username-message.patch b/patches/server/0166-Config-for-unverified-username-message.patch similarity index 100% rename from patches/server/0164-Config-for-unverified-username-message.patch rename to patches/server/0166-Config-for-unverified-username-message.patch diff --git a/patches/server/0165-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0167-Make-anvil-cumulative-cost-configurable.patch similarity index 100% rename from patches/server/0165-Make-anvil-cumulative-cost-configurable.patch rename to patches/server/0167-Make-anvil-cumulative-cost-configurable.patch diff --git a/patches/server/0166-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch similarity index 100% rename from patches/server/0166-Bee-can-work-when-raining-or-at-night.patch rename to patches/server/0168-Bee-can-work-when-raining-or-at-night.patch diff --git a/patches/server/0167-API-for-any-mob-to-burn-daylight.patch b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch similarity index 96% rename from patches/server/0167-API-for-any-mob-to-burn-daylight.patch rename to patches/server/0169-API-for-any-mob-to-burn-daylight.patch index 173c14200..f7427cfec 100644 --- a/patches/server/0167-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f8342a0254be24dd74846734977a19e349b58b11..979d5942219830cadf756f7f7098b4e77662536f 100644 +index cc4bb21903a44a7a06176274bfdaddd3626f78c7..543fc2aeee9fa16a5493b947e49d37ff678935df 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -556,6 +556,22 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -559,6 +559,22 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Purpur end @@ -33,10 +33,10 @@ index f8342a0254be24dd74846734977a19e349b58b11..979d5942219830cadf756f7f7098b4e7 this.id = Entity.ENTITY_COUNTER.incrementAndGet(); this.passengers = ImmutableList.of(); diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index d213e299d7bdba4161bd1a2fee9b1042a561abc0..936491872bc1d0c260daff8c62223a21d8ab254d 100644 +index 0b488f45c7f259ced70004909077bc5a15191580..19dc529bef0cf9a9accb8a8615f5eeb22663d605 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -286,6 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -285,6 +285,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -44,7 +44,7 @@ index d213e299d7bdba4161bd1a2fee9b1042a561abc0..936491872bc1d0c260daff8c62223a21 @Override public float getBukkitYaw() { -@@ -817,6 +818,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -816,6 +817,7 @@ public abstract class LivingEntity extends Entity implements Attackable { dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> { nbt.put("Brain", nbtbase); }); @@ -52,7 +52,7 @@ index d213e299d7bdba4161bd1a2fee9b1042a561abc0..936491872bc1d0c260daff8c62223a21 } @Override -@@ -905,6 +907,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -904,6 +906,11 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain"))); } @@ -64,7 +64,7 @@ index d213e299d7bdba4161bd1a2fee9b1042a561abc0..936491872bc1d0c260daff8c62223a21 } // CraftBukkit start -@@ -3635,6 +3642,34 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3661,6 +3668,34 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().drown(), 1.0F); } @@ -100,10 +100,10 @@ index d213e299d7bdba4161bd1a2fee9b1042a561abc0..936491872bc1d0c260daff8c62223a21 public boolean isSensitiveToWater() { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index d5c2b878abe44ee6fe856771c97759b2d0e51681..2166a9db0fd6c3c3cb3293c99e81b08f733089eb 100644 +index 86ae2cb0e398f4e85c90ca5b20dce8eacde7d71f..377f4311de40d702c53b0641376e6b2bddf33028 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1778,17 +1778,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1784,17 +1784,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void playAttackSound() {} public boolean isSunBurnTick() { diff --git a/patches/server/0168-Config-MobEffect-by-world.patch b/patches/server/0170-Config-MobEffect-by-world.patch similarity index 100% rename from patches/server/0168-Config-MobEffect-by-world.patch rename to patches/server/0170-Config-MobEffect-by-world.patch diff --git a/patches/server/0169-Beacon-Activation-Range-Configurable.patch b/patches/server/0171-Beacon-Activation-Range-Configurable.patch similarity index 100% rename from patches/server/0169-Beacon-Activation-Range-Configurable.patch rename to patches/server/0171-Beacon-Activation-Range-Configurable.patch diff --git a/patches/server/0170-Make-lightning-rod-range-configurable.patch b/patches/server/0172-Make-lightning-rod-range-configurable.patch similarity index 93% rename from patches/server/0170-Make-lightning-rod-range-configurable.patch rename to patches/server/0172-Make-lightning-rod-range-configurable.patch index 4c3554dbe..904eb640c 100644 --- a/patches/server/0170-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0172-Make-lightning-rod-range-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 0d690ba8f752cc95812da2cad5b7c297b0289b30..d70af5d1e743a981ffc3d85d06a7602925664148 100644 +index 9937cdc35114e5e23d57425267c956c50b843446..2796e70c4178122bb141734b7cdd0b7d64ffda65 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1007,7 +1007,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1021,7 +1021,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; diff --git a/patches/server/0171-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch similarity index 100% rename from patches/server/0171-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch rename to patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch diff --git a/patches/server/0172-Allow-player-join-full-server-by-permission.patch b/patches/server/0174-Allow-player-join-full-server-by-permission.patch similarity index 100% rename from patches/server/0172-Allow-player-join-full-server-by-permission.patch rename to patches/server/0174-Allow-player-join-full-server-by-permission.patch diff --git a/patches/server/0173-Add-portal-permission-bypass.patch b/patches/server/0175-Add-portal-permission-bypass.patch similarity index 100% rename from patches/server/0173-Add-portal-permission-bypass.patch rename to patches/server/0175-Add-portal-permission-bypass.patch diff --git a/patches/server/0174-Shulker-spawn-from-bullet-options.patch b/patches/server/0176-Shulker-spawn-from-bullet-options.patch similarity index 100% rename from patches/server/0174-Shulker-spawn-from-bullet-options.patch rename to patches/server/0176-Shulker-spawn-from-bullet-options.patch diff --git a/patches/server/0175-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0177-Eating-glow-berries-adds-glow-effect.patch similarity index 100% rename from patches/server/0175-Eating-glow-berries-adds-glow-effect.patch rename to patches/server/0177-Eating-glow-berries-adds-glow-effect.patch diff --git a/patches/server/0176-Option-to-make-drowned-break-doors.patch b/patches/server/0178-Option-to-make-drowned-break-doors.patch similarity index 100% rename from patches/server/0176-Option-to-make-drowned-break-doors.patch rename to patches/server/0178-Option-to-make-drowned-break-doors.patch diff --git a/patches/server/0177-Configurable-hunger-starvation-damage.patch b/patches/server/0179-Configurable-hunger-starvation-damage.patch similarity index 100% rename from patches/server/0177-Configurable-hunger-starvation-damage.patch rename to patches/server/0179-Configurable-hunger-starvation-damage.patch diff --git a/patches/server/0178-Enhance-SysoutCatcher.patch b/patches/server/0180-Enhance-SysoutCatcher.patch similarity index 100% rename from patches/server/0178-Enhance-SysoutCatcher.patch rename to patches/server/0180-Enhance-SysoutCatcher.patch diff --git a/patches/server/0179-Add-uptime-command.patch b/patches/server/0181-Add-uptime-command.patch similarity index 98% rename from patches/server/0179-Add-uptime-command.patch rename to patches/server/0181-Add-uptime-command.patch index 683d15e71..e1db85235 100644 --- a/patches/server/0179-Add-uptime-command.patch +++ b/patches/server/0181-Add-uptime-command.patch @@ -17,7 +17,7 @@ index c7b7cc0d9ce589b5a0600e9b8c46b2e5d7a520bd..9f86a0397c0b64cb31dad245e2dc84d0 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f21395bfb83a80dd0b3197870ef162cb5669cbf9..78921a485917012bbebe7d6ac05fb975449f8338 100644 +index 885b63225cc45382240b117ccdacbd8dc7d8b4c2..6b8c4f67e9f8428339f8a398707dc4ad519c0048 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -304,6 +304,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); diff --git a/patches/server/0190-Add-Option-for-disable-observer-clocks.patch b/patches/server/0192-Add-Option-for-disable-observer-clocks.patch similarity index 100% rename from patches/server/0190-Add-Option-for-disable-observer-clocks.patch rename to patches/server/0192-Add-Option-for-disable-observer-clocks.patch diff --git a/patches/server/0191-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch similarity index 100% rename from patches/server/0191-Customizeable-Zombie-Villager-curing-times.patch rename to patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch diff --git a/patches/server/0192-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch similarity index 100% rename from patches/server/0192-Option-for-sponges-to-work-on-lava-and-mud.patch rename to patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch diff --git a/patches/server/0193-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch similarity index 93% rename from patches/server/0193-Toggle-for-Wither-s-spawn-sound.patch rename to patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch index 979b0567f..5d5126b71 100644 --- a/patches/server/0193-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound 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 cf4161c57c3d8e6e93bce9e20490cd0893e8e0ca..3492cfcb6f0764f54caa1a5658801cd7a084e9b3 100644 +index c0d5fc670ff428a4293e8965068f52449a5c8b47..8d9154fc197e8604a5b07efe6b2aa76d7a122b0e 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 -@@ -427,7 +427,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -434,7 +434,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end diff --git a/patches/server/0194-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch similarity index 100% rename from patches/server/0194-Cactus-breaks-from-solid-neighbors-config.patch rename to patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch diff --git a/patches/server/0195-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch similarity index 100% rename from patches/server/0195-Config-to-remove-curse-of-binding-with-weakness.patch rename to patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch diff --git a/patches/server/0196-Conduit-behavior-configuration.patch b/patches/server/0198-Conduit-behavior-configuration.patch similarity index 100% rename from patches/server/0196-Conduit-behavior-configuration.patch rename to patches/server/0198-Conduit-behavior-configuration.patch diff --git a/patches/server/0197-Cauldron-fill-chances.patch b/patches/server/0199-Cauldron-fill-chances.patch similarity index 100% rename from patches/server/0197-Cauldron-fill-chances.patch rename to patches/server/0199-Cauldron-fill-chances.patch diff --git a/patches/server/0198-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch similarity index 100% rename from patches/server/0198-Config-to-allow-mobs-to-pathfind-over-rails.patch rename to patches/server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch diff --git a/patches/server/0199-Shulker-change-color-with-dye.patch b/patches/server/0201-Shulker-change-color-with-dye.patch similarity index 100% rename from patches/server/0199-Shulker-change-color-with-dye.patch rename to patches/server/0201-Shulker-change-color-with-dye.patch diff --git a/patches/server/0200-Extended-OfflinePlayer-API.patch b/patches/server/0202-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/server/0200-Extended-OfflinePlayer-API.patch rename to patches/server/0202-Extended-OfflinePlayer-API.patch diff --git a/patches/server/0201-Added-the-ability-to-add-combustible-items.patch b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch similarity index 100% rename from patches/server/0201-Added-the-ability-to-add-combustible-items.patch rename to patches/server/0203-Added-the-ability-to-add-combustible-items.patch diff --git a/patches/server/0202-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch similarity index 93% rename from patches/server/0202-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch rename to patches/server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch index eac5a2c5f..91cfa38bb 100644 --- a/patches/server/0202-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch +++ b/patches/server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9b38adcdabb22c42611aad8d1ed226542d34ac34..40d2472cebbde4a435d1b65ec8062c18b87c0cdb 100644 +index 76a1875253af0e3c343b471f886946fa61e880de..7ee54bc8b1ce7524c4c61c8e3261380205f2c268 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1216,6 +1216,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1230,6 +1230,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -16,7 +16,7 @@ index 9b38adcdabb22c42611aad8d1ed226542d34ac34..40d2472cebbde4a435d1b65ec8062c18 this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1223,6 +1224,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1237,6 +1238,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.serverLevelData.setRainTime(0); } // CraftBukkit end diff --git a/patches/server/0203-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch similarity index 100% rename from patches/server/0203-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch rename to patches/server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch diff --git a/patches/server/0204-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0206-Shift-right-click-to-use-exp-for-mending.patch similarity index 96% rename from patches/server/0204-Shift-right-click-to-use-exp-for-mending.patch rename to patches/server/0206-Shift-right-click-to-use-exp-for-mending.patch index a1f20b7dd..6cbc90110 100644 --- a/patches/server/0204-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0206-Shift-right-click-to-use-exp-for-mending.patch @@ -36,10 +36,10 @@ index fe734df8b4521101c3e55c042957a531b3bdf945..7c06b284a6cc74c0b31f8921706c7796 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f4392eb11dfba8b7423b6e917a38fa44be5c35fa..95494ad10f18bb6b700e11b6c338a52ff5a880cc 100644 +index 435ab19d1fad30cd75aa705861760674b09ea0ac..4db8975e8cb786042239c19f81c9b7f4637d010d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1998,6 +1998,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1999,6 +1999,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { diff --git a/patches/server/0205-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch similarity index 100% rename from patches/server/0205-Dolphins-naturally-aggressive-to-players-chance.patch rename to patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0206-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch similarity index 100% rename from patches/server/0206-Cows-naturally-aggressive-to-players-chance.patch rename to patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0207-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0209-Option-for-beds-to-explode-on-villager-sleep.patch similarity index 94% rename from patches/server/0207-Option-for-beds-to-explode-on-villager-sleep.patch rename to patches/server/0209-Option-for-beds-to-explode-on-villager-sleep.patch index 2956e1a8b..3f20e2b78 100644 --- a/patches/server/0207-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0209-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep 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 77fc9ca8d4a72cdb7db51297a13808f46e497126..884d9074da27a1a8157e0e6d669363750a2415c8 100644 +index 671d1dafbfe2f8ba24096f78e2661014d00a5e09..cef163bc12629d538582d7735ed47bd31448d5cc 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1105,6 +1105,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1107,6 +1107,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { diff --git a/patches/server/0208-Halloween-options-and-optimizations.patch b/patches/server/0210-Halloween-options-and-optimizations.patch similarity index 92% rename from patches/server/0208-Halloween-options-and-optimizations.patch rename to patches/server/0210-Halloween-options-and-optimizations.patch index b8cbeff82..703c5edcc 100644 --- a/patches/server/0208-Halloween-options-and-optimizations.patch +++ b/patches/server/0210-Halloween-options-and-optimizations.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Halloween options and optimizations 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 9bb113741bae68b865109549a4025ddf1008103e..510b5c463ded2cdb294da017a33364db9f76a5c1 100644 +index 3d556fb56977f3a75702c43e933340155e3e1cf3..54a3cb6b0a30b3a5dadda88afed28e9679d74ccc 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -302,7 +302,7 @@ public class Bat extends AmbientCreature { @@ -17,14 +17,14 @@ index 9bb113741bae68b865109549a4025ddf1008103e..510b5c463ded2cdb294da017a33364db b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -312,6 +312,7 @@ public class Bat extends AmbientCreature { - } - } - +@@ -316,6 +316,7 @@ public class Bat extends AmbientCreature { + private static boolean isSpookySeason = false; + private static final int ONE_HOUR = 20 * 60 * 60; + private static int lastSpookyCheck = -ONE_HOUR; + public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur private static boolean isHalloween() { + if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) { LocalDate localdate = LocalDate.now(); - int i = localdate.get(ChronoField.DAY_OF_MONTH); diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java index 1d06c612eaba8b595fa3d094577f700989d1e224..4aeb23de31e826d5cf27f8c91bd60c911f769a17 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java diff --git a/patches/server/0209-Config-for-grindstones.patch b/patches/server/0211-Config-for-grindstones.patch similarity index 100% rename from patches/server/0209-Config-for-grindstones.patch rename to patches/server/0211-Config-for-grindstones.patch diff --git a/patches/server/0210-UPnP-Port-Forwarding.patch b/patches/server/0212-UPnP-Port-Forwarding.patch similarity index 93% rename from patches/server/0210-UPnP-Port-Forwarding.patch rename to patches/server/0212-UPnP-Port-Forwarding.patch index c9becbc6f..2cdea9cd7 100644 --- a/patches/server/0210-UPnP-Port-Forwarding.patch +++ b/patches/server/0212-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 78921a485917012bbebe7d6ac05fb975449f8338..e4ccd6b8751d61c8be0c36b72d8d155e8452b379 100644 +index 6b8c4f67e9f8428339f8a398707dc4ad519c0048..4612bf69c6fb249df161aada20fa0c0f0238e96e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -321,6 +321,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop getModelRotationValues() { return this.modelRotationValues; 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 9fba034ed863d1dc1ee5fb7cf09650382481dbc7..fab01a3e779e39962ef04305540e2fe3043072a2 100644 +index 8272b68f05723caceca806f2dd5fa00c6fd50e6e..9513f9ba6bb677536d2ec136ae5b2f5c091c4c93 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 @@ -118,6 +118,11 @@ public class Goat extends Animal { @@ -549,7 +549,7 @@ index 343632a030eb423367387750fabbdae53c4bb20b..201471473b7ecc7489c4303a0d37b99f return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } 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 3492cfcb6f0764f54caa1a5658801cd7a084e9b3..a4995d114fd844e0d39726537a2e4076daf43120 100644 +index 8d9154fc197e8604a5b07efe6b2aa76d7a122b0e..d9f5e2413321ed7ed57f84c865ab271af06e667c 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 @@ -137,6 +137,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -645,7 +645,7 @@ index 795bf6c37362382124ca1ea8ce2a294b421eaa3b..9c9c8b83b3f793045b487891512e4de3 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index aafecf7d199bbcaa09403ed15bf199f7ca89dde6..ee260e88dda5d3f770bd48345bc932d48334fb03 100644 +index ecd117f7e3b2136fcf49384819626fe7de952098..85b1fefbdb32c7f010dd5650d2573199273113bd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -118,6 +118,11 @@ public class EnderMan extends Monster implements NeutralMob { @@ -1077,7 +1077,7 @@ index f2081f3b4a4bbda071cfc5c714d887ff2de96148..1c04fbea0dce4167a0902b92b95d470f public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 4c6db2e685b204e55b8be7bfb666d25ae81c17c7..705385f5136ab6e063207004a045ed6a860b9903 100644 +index 563af99f4b17b38e074fbc752b41a8c7fb9f5a01..4b4a81f78d0f3e4a44b423e7c67423a7237cdeaf 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 @@ -123,6 +123,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1093,7 +1093,7 @@ index 4c6db2e685b204e55b8be7bfb666d25ae81c17c7..705385f5136ab6e063207004a045ed6a public boolean canBeLeashed() { return true; 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 d8cf4a12964d77f9e9e6652a827863da77b37750..02294488328707a7a67442669eeb48212c1452ab 100644 +index bb85a7dfbb4225e0f1d1d63212928bbb4b137a78..63c2486b25c1fd88675e3cd9411f2b440c652700 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 @@ -121,6 +121,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1125,10 +1125,10 @@ index db8c029799215223d7a594dbb945d6aa7966e67a..5537f4e2bdce05ef5863955b9403eda7 return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } 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 884d9074da27a1a8157e0e6d669363750a2415c8..7c7d7e5d0a07c870229d86f557e8e91e02f59d0a 100644 +index cef163bc12629d538582d7735ed47bd31448d5cc..b05b4df3c6dd3c08da10add4180829357b2e7f00 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -195,6 +195,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -197,6 +197,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerTakeDamageFromWater; } diff --git a/patches/server/0218-Grindstone-API.patch b/patches/server/0220-Grindstone-API.patch similarity index 100% rename from patches/server/0218-Grindstone-API.patch rename to patches/server/0220-Grindstone-API.patch diff --git a/patches/server/0219-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch similarity index 100% rename from patches/server/0219-Ability-for-hoe-to-replant-crops-and-nether-warts.patch rename to patches/server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch diff --git a/patches/server/0220-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0222-Turtle-eggs-random-tick-crack-chance.patch similarity index 100% rename from patches/server/0220-Turtle-eggs-random-tick-crack-chance.patch rename to patches/server/0222-Turtle-eggs-random-tick-crack-chance.patch diff --git a/patches/server/0221-Mob-head-visibility-percent.patch b/patches/server/0223-Mob-head-visibility-percent.patch similarity index 97% rename from patches/server/0221-Mob-head-visibility-percent.patch rename to patches/server/0223-Mob-head-visibility-percent.patch index f7bd5d8f0..1fa1a9c15 100644 --- a/patches/server/0221-Mob-head-visibility-percent.patch +++ b/patches/server/0223-Mob-head-visibility-percent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mob head visibility percent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7ff96396797d08d15fe6346678f172035ec7caa9..8c992659cb1a6d894d66ed8d8b943c6dc4b6c4c9 100644 +index ad8b1ff4ea483b18cfb2f79cfe094655dec4d032..391625ad3fd69f7ab4052afe2ea4d566dd1ac5a5 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1047,9 +1047,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1046,9 +1046,20 @@ public abstract class LivingEntity extends Entity implements Attackable { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); EntityType entitytypes = entity.getType(); diff --git a/patches/server/0222-Configurable-valid-characters-for-usernames.patch b/patches/server/0224-Configurable-valid-characters-for-usernames.patch similarity index 100% rename from patches/server/0222-Configurable-valid-characters-for-usernames.patch rename to patches/server/0224-Configurable-valid-characters-for-usernames.patch diff --git a/patches/server/0223-Shears-can-have-looting-enchantment.patch b/patches/server/0225-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/server/0223-Shears-can-have-looting-enchantment.patch rename to patches/server/0225-Shears-can-have-looting-enchantment.patch diff --git a/patches/server/0224-Stop-bees-from-dying-after-stinging.patch b/patches/server/0226-Stop-bees-from-dying-after-stinging.patch similarity index 100% rename from patches/server/0224-Stop-bees-from-dying-after-stinging.patch rename to patches/server/0226-Stop-bees-from-dying-after-stinging.patch diff --git a/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch similarity index 95% rename from patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch rename to patches/server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch index b738a734f..1a3b4802e 100644 --- a/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index e4ccd6b8751d61c8be0c36b72d8d155e8452b379..f613f127fd31812012fd1f83ad0bfdf6692bc136 100644 +index 4612bf69c6fb249df161aada20fa0c0f0238e96e..c026ae0e9b577bedcba5d4093b83889bcb1b0ad4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1149,6 +1149,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entityType, Level world) { - this(entityType, world, VillagerType.PLAINS); -@@ -200,6 +202,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public long nextGolemPanic = -1; // Pufferfish + +@@ -202,6 +204,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerAlwaysDropExp; } @@ -66,7 +66,7 @@ index d2cbc3707a04c9f6c1191cd279e8f26b7439d0b1..05c945ba584757f8b3ccba5073491718 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -296,10 +340,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -299,13 +343,22 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start this.customServerAiStep(false); } @@ -82,11 +82,14 @@ index d2cbc3707a04c9f6c1191cd279e8f26b7439d0b1..05c945ba584757f8b3ccba5073491718 + this.isLobotomized = false; + } + // Purpur end - if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper -+ else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - /*// Purpur start // Purpur - TODO: Pufferfish + // Pufferfish start if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); // Paper + } ++ else if (this.isLobotomized && shouldRestock()) restock(); // Purpur + // Pufferfish end + this.level().getProfiler().pop(); + if (this.assignProfessionWhenSpawned) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java index bd2987fa1fb194a581567134ed980e8fc043f435..bdd345595ed71a8018349e184afe8582a24f3622 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java diff --git a/patches/server/0233-Option-for-villager-display-trade-item.patch b/patches/server/0235-Option-for-villager-display-trade-item.patch similarity index 100% rename from patches/server/0233-Option-for-villager-display-trade-item.patch rename to patches/server/0235-Option-for-villager-display-trade-item.patch diff --git a/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch similarity index 100% rename from patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch rename to patches/server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch diff --git a/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch similarity index 96% rename from patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch rename to patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch index ca7a72082..2a9be54c9 100644 --- a/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for mob last hurt by player time diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 8c992659cb1a6d894d66ed8d8b943c6dc4b6c4c9..9582498c5cbcc859b942384e8e0e492cb2cdea03 100644 +index 391625ad3fd69f7ab4052afe2ea4d566dd1ac5a5..2ff8d9a0d4095aebeec7dff76fd0280b29762c3d 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1567,13 +1567,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1579,13 +1579,13 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entity1 instanceof net.minecraft.world.entity.player.Player) { net.minecraft.world.entity.player.Player entityhuman = (net.minecraft.world.entity.player.Player) entity1; diff --git a/patches/server/0236-Anvil-repair-damage-options.patch b/patches/server/0238-Anvil-repair-damage-options.patch similarity index 100% rename from patches/server/0236-Anvil-repair-damage-options.patch rename to patches/server/0238-Anvil-repair-damage-options.patch diff --git a/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch similarity index 100% rename from patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch rename to patches/server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch diff --git a/patches/server/0238-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0240-Add-toggle-for-enchant-level-clamping.patch similarity index 100% rename from patches/server/0238-Add-toggle-for-enchant-level-clamping.patch rename to patches/server/0240-Add-toggle-for-enchant-level-clamping.patch diff --git a/patches/server/0239-Skip-junit-tests-for-purpur-commands.patch b/patches/server/0241-Skip-junit-tests-for-purpur-commands.patch similarity index 100% rename from patches/server/0239-Skip-junit-tests-for-purpur-commands.patch rename to patches/server/0241-Skip-junit-tests-for-purpur-commands.patch diff --git a/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch similarity index 94% rename from patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch index 63fd3ee7d..79a9c1423 100644 --- a/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn 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 05c945ba584757f8b3ccba50734917183882b10f..d4f64414a0351999a04308a3d26d15c9ddf266c7 100644 +index 3d93d548b8c68cc0ee7c52dd0f92664c47077b6d..4af1857c4fbc18067b2fa0ae43501ce540630c6f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1099,6 +1099,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1101,6 +1101,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { diff --git a/patches/server/0241-Stonecutter-damage.patch b/patches/server/0243-Stonecutter-damage.patch similarity index 100% rename from patches/server/0241-Stonecutter-damage.patch rename to patches/server/0243-Stonecutter-damage.patch diff --git a/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0244-Configurable-damage-settings-for-magma-blocks.patch similarity index 100% rename from patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch rename to patches/server/0244-Configurable-damage-settings-for-magma-blocks.patch diff --git a/patches/server/0243-Add-config-for-snow-on-blue-ice.patch b/patches/server/0245-Add-config-for-snow-on-blue-ice.patch similarity index 100% rename from patches/server/0243-Add-config-for-snow-on-blue-ice.patch rename to patches/server/0245-Add-config-for-snow-on-blue-ice.patch diff --git a/patches/server/0244-Skeletons-eat-wither-roses.patch b/patches/server/0246-Skeletons-eat-wither-roses.patch similarity index 100% rename from patches/server/0244-Skeletons-eat-wither-roses.patch rename to patches/server/0246-Skeletons-eat-wither-roses.patch diff --git a/patches/server/0245-Enchantment-Table-Persists-Lapis.patch b/patches/server/0247-Enchantment-Table-Persists-Lapis.patch similarity index 100% rename from patches/server/0245-Enchantment-Table-Persists-Lapis.patch rename to patches/server/0247-Enchantment-Table-Persists-Lapis.patch diff --git a/patches/server/0246-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0248-Option-to-disable-kick-for-out-of-order-chat.patch similarity index 100% rename from patches/server/0246-Option-to-disable-kick-for-out-of-order-chat.patch rename to patches/server/0248-Option-to-disable-kick-for-out-of-order-chat.patch diff --git a/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0249-Config-for-sculk-shrieker-can_summon-state.patch similarity index 100% rename from patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch rename to patches/server/0249-Config-for-sculk-shrieker-can_summon-state.patch diff --git a/patches/server/0248-Config-to-not-let-coral-die.patch b/patches/server/0250-Config-to-not-let-coral-die.patch similarity index 100% rename from patches/server/0248-Config-to-not-let-coral-die.patch rename to patches/server/0250-Config-to-not-let-coral-die.patch diff --git a/patches/server/0249-Add-local-difficulty-api.patch b/patches/server/0251-Add-local-difficulty-api.patch similarity index 100% rename from patches/server/0249-Add-local-difficulty-api.patch rename to patches/server/0251-Add-local-difficulty-api.patch diff --git a/patches/server/0250-Add-toggle-for-RNG-manipulation.patch b/patches/server/0252-Add-toggle-for-RNG-manipulation.patch similarity index 95% rename from patches/server/0250-Add-toggle-for-RNG-manipulation.patch rename to patches/server/0252-Add-toggle-for-RNG-manipulation.patch index 33a623306..1d9d0f30a 100644 --- a/patches/server/0250-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0252-Add-toggle-for-RNG-manipulation.patch @@ -7,10 +7,10 @@ Paper patches RNG maniplulation by using a shared (and locked) random source. This comes with a performance gain, but technical players may prefer the ability to manipulate RNG. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 979d5942219830cadf756f7f7098b4e77662536f..8a7d0064356afed74850a679c5d6b513ce478c47 100644 +index 543fc2aeee9fa16a5493b947e49d37ff678935df..74c5b87a2a382e37db7e4c12470badcf9e07cf54 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -579,7 +579,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -582,7 +582,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; diff --git a/patches/server/0251-Remove-Timings.patch b/patches/server/0253-Remove-Timings.patch similarity index 92% rename from patches/server/0251-Remove-Timings.patch rename to patches/server/0253-Remove-Timings.patch index 58a5e8bc3..122df5820 100644 --- a/patches/server/0251-Remove-Timings.patch +++ b/patches/server/0253-Remove-Timings.patch @@ -42,10 +42,10 @@ index e2c24813f59c2fd075c740ac1842a38f20ed8554..01efbc507b3d58f13f78ee286f93df40 } catch (Exception exception) { if (exception instanceof ReportedException) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f613f127fd31812012fd1f83ad0bfdf6692bc136..771c81e505974d8e3a21886eb0f0b07c87601bb0 100644 +index c026ae0e9b577bedcba5d4093b83889bcb1b0ad4..3c382484dcf1205890a2f284ab27b9722ffd5c35 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1606,15 +1606,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -97,7 +97,7 @@ index f613f127fd31812012fd1f83ad0bfdf6692bc136..771c81e505974d8e3a21886eb0f0b07c // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1767,21 +1767,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -211,7 +211,7 @@ index 1e0a6e5a3c907ab55ee6f2780a7d43bd455f2b7b..1249b81a603c09934fe8f1c91a16694c ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -983,17 +983,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -987,17 +987,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -233,10 +233,10 @@ index 1e0a6e5a3c907ab55ee6f2780a7d43bd455f2b7b..1249b81a603c09934fe8f1c91a16694c } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index dcb5651d1d9b10b40430fb2f713beedf68336704..4aa9fbdf1eda91a5c54ff53709d94f30e9b2e62b 100644 +index dbc62bf37a9e6e1936558338521938a47a51e2d6..793f16cb4049d121a6ef7ca4fcd9519dc8c0a7b0 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -356,9 +356,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -359,9 +359,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon public void save(boolean flush) { // Paper - rewrite chunk system @@ -248,7 +248,7 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..4aa9fbdf1eda91a5c54ff53709d94f30 } @Override -@@ -394,26 +394,25 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -397,26 +397,25 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -281,7 +281,7 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..4aa9fbdf1eda91a5c54ff53709d94f30 this.level.getProfiler().pop(); this.clearCache(); } -@@ -449,13 +448,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -452,13 +451,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - chunk tick iteration optimisations Iterator iterator = null; // Paper - chunk tick iteration optimisations @@ -297,16 +297,16 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..4aa9fbdf1eda91a5c54ff53709d94f30 int k = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -480,7 +479,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon - spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); +@@ -488,7 +487,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + // Pufferfish end } // Paper end - Optional per player mob spawns - this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings + // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur - this.lastSpawnState = spawnercreature_d; + // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously gameprofilerfiller.popPush("spawnAndTick"); -@@ -521,19 +520,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -529,19 +528,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } } } @@ -330,7 +330,7 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..4aa9fbdf1eda91a5c54ff53709d94f30 { final it.unimi.dsi.fastutil.objects.ObjectArrayList chunks = (it.unimi.dsi.fastutil.objects.ObjectArrayList)list; final ServerChunkCache.ChunkAndHolder[] raw = chunks.elements(); -@@ -547,7 +546,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -555,7 +554,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon holder.holder().broadcastChanges(holder.chunk()); } } @@ -340,7 +340,7 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..4aa9fbdf1eda91a5c54ff53709d94f30 gameprofilerfiller.pop(); gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe 100644 +index 514620a64495023fa917c14c971cd112fd64b33a..7ece40ea9ad3ba74b93250f72b42fc6299bedc82 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -687,7 +687,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -400,9 +400,9 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 - this.timings.entityTick.startTiming(); // Spigot + //this.timings.entityTick.startTiming(); // Spigot // Purpur this.entityTickList.forEach((entity) -> { + entity.activatedPriorityReset = false; // Pufferfish - DAB if (!entity.isRemoved()) { - if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed -@@ -761,8 +761,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -775,8 +775,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } } }); @@ -413,7 +413,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 gameprofilerfiller.pop(); this.tickBlockEntities(); } -@@ -952,12 +952,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -966,12 +966,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } // Paper - Option to disable ice and snow gameprofilerfiller.popPush("tickBlocks"); @@ -428,7 +428,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 gameprofilerfiller.pop(); } -@@ -1300,8 +1300,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1314,8 +1314,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. // Spigot end // Paper start- timings final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity); @@ -439,7 +439,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 // Paper end - timings entity.setOldPosAndRot(); ProfilerFiller gameprofilerfiller = this.getProfiler(); -@@ -1317,7 +1317,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1331,7 +1331,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. entity.postTick(); // CraftBukkit } else { entity.inactiveTick(); } // Paper - EAR 2 this.getProfiler().pop(); @@ -448,7 +448,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1340,8 +1340,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1354,8 +1354,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (passenger instanceof Player || this.entityTickList.contains(passenger)) { // Paper - EAR 2 final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger); @@ -459,7 +459,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; -@@ -1371,7 +1371,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1385,7 +1385,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.tickPassenger(passenger, entity2); } @@ -468,7 +468,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 } } else { passenger.stopRiding(); -@@ -1391,7 +1391,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1405,7 +1405,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); } @@ -477,7 +477,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 if (doFull) { this.saveLevelData(true); } -@@ -1408,7 +1408,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1422,7 +1422,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData()); } // CraftBukkit end @@ -486,7 +486,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 } // Paper end - Incremental chunk and player saving -@@ -1422,7 +1422,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1436,7 +1436,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit @@ -495,7 +495,7 @@ index e2f8ee57eeeceba632ff04c434fba82f9d22625b..dc7db7a2c8b42f7ed2b7b28fe2ed6224 if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1432,10 +1432,10 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1446,10 +1446,10 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -581,7 +581,7 @@ index 85b4b24361e785acf75571ff98f924c00ae80748..09a7b418ddf564c0be13297f7c216db2 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 10df967d7694c5806453bb4abbb14deab16e116d..9dd8378099b1ece5657adf1677f988ca331899b1 100644 +index 442c77fb3ac421ae6a90b5b96e1d00d4d65eeade..e7642c30833d1efd159cd15429e1247022cfd511 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1415,15 +1415,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -635,10 +635,10 @@ index e524b27d185da3e88668f8ef107517272860bd66..735f39fed209e086a52185565f8bd687 } 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 7c11853c5090fbc4fa5b3e73a69acf166158fdec..1d2986780d75272422e678cf25c9a31666ba8866 100644 +index 6282db087ac330d0e3a97c93f03eb64e8b3246f3..a0e6f39ba00212a078e04b21831a5ed22ad0825b 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -666,7 +666,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -680,7 +680,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler().chunkHolderManager.getChunkHolder(this.locX, this.locZ).getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system if (this.needsDecoration) { @@ -647,7 +647,7 @@ index 7c11853c5090fbc4fa5b3e73a69acf166158fdec..1d2986780d75272422e678cf25c9a316 this.needsDecoration = false; java.util.Random random = new java.util.Random(); random.setSeed(this.level.getSeed()); -@@ -686,7 +686,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -700,7 +700,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } } server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(bukkitChunk)); @@ -656,7 +656,7 @@ index 7c11853c5090fbc4fa5b3e73a69acf166158fdec..1d2986780d75272422e678cf25c9a316 } } } -@@ -1026,7 +1026,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1040,7 +1040,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p ProfilerFiller gameprofilerfiller = LevelChunk.this.level.getProfiler(); gameprofilerfiller.push(this::getType); @@ -665,7 +665,7 @@ index 7c11853c5090fbc4fa5b3e73a69acf166158fdec..1d2986780d75272422e678cf25c9a316 BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); if (this.blockEntity.getType().isValid(iblockdata)) { -@@ -1053,7 +1053,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1067,7 +1067,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p // Paper end - Prevent block entity and entity crashes // Spigot start } finally { @@ -752,10 +752,10 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..d3ec817e95628f1fc8be4a29c9a0f13c // Paper end - add timings for scoreboard search } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 9bec373c470a4f2bc0f1f4101469ec8be903ab83..1e8100be8d443d43e99e0c5f777e20872f6e1a7f 100644 +index ba180127a50b1a1ed155ee4053440074e38adef4..ed1cdea66dd117ecafd14a52727f094430f39b60 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -167,7 +167,7 @@ public class ActivationRange +@@ -171,7 +171,7 @@ public class ActivationRange */ public static void activateEntities(Level world) { @@ -764,7 +764,7 @@ index 9bec373c470a4f2bc0f1f4101469ec8be903ab83..1e8100be8d443d43e99e0c5f777e2087 final int miscActivationRange = world.spigotConfig.miscActivationRange; final int raiderActivationRange = world.spigotConfig.raiderActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; -@@ -228,7 +228,7 @@ public class ActivationRange +@@ -251,7 +251,7 @@ public class ActivationRange } // Paper end } diff --git a/patches/server/0252-Remove-Mojang-Profiler.patch b/patches/server/0254-Remove-Mojang-Profiler.patch similarity index 89% rename from patches/server/0252-Remove-Mojang-Profiler.patch rename to patches/server/0254-Remove-Mojang-Profiler.patch index 4b581206d..5c6338a77 100644 --- a/patches/server/0252-Remove-Mojang-Profiler.patch +++ b/patches/server/0254-Remove-Mojang-Profiler.patch @@ -83,10 +83,10 @@ index e9775b4506909bee65a74964f0d5391a0513de1d..684f7f202305c09b1037c5d38a52a5ea } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 771c81e505974d8e3a21886eb0f0b07c87601bb0..cdb5b001ec3104a04da9a160c6c4db532c3508e1 100644 +index 3c382484dcf1205890a2f284ab27b9722ffd5c35..1089238297ee7d129d71553205574f54737f1acc 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -422,13 +422,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return false; } : this::haveTime); -@@ -1331,7 +1331,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1648,7 +1648,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur @@ -246,7 +246,7 @@ index 771c81e505974d8e3a21886eb0f0b07c87601bb0..cdb5b001ec3104a04da9a160c6c4db53 try { //worldserver.timings.doTick.startTiming(); // Spigot // Purpur -@@ -1839,17 +1839,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2860,40 +2861,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list; { -@@ -453,7 +454,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -456,7 +457,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon // Paper - chunk tick iteration optimisations if (this.level.tickRateManager().runsNormally()) { @@ -544,16 +545,16 @@ index 4aa9fbdf1eda91a5c54ff53709d94f30e9b2e62b..548549817ab5a835c1ea66676bc75fa5 //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur int k = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns -@@ -482,7 +483,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -490,7 +491,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur - this.lastSpawnState = spawnercreature_d; + // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously - gameprofilerfiller.popPush("spawnAndTick"); + //gameprofilerfiller.popPush("spawnAndTick"); // Purpur boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit if (!this.level.paperConfig().entities.spawning.perPlayerMobSpawns) Util.shuffle(list, this.level.random); // Paper - per player mob spawns - do not need this when per-player is enabled -@@ -522,7 +523,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -530,7 +531,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } //this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur @@ -562,7 +563,7 @@ index 4aa9fbdf1eda91a5c54ff53709d94f30e9b2e62b..548549817ab5a835c1ea66676bc75fa5 if (flag) { //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); -@@ -530,7 +531,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -538,7 +539,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } } @@ -571,7 +572,7 @@ index 4aa9fbdf1eda91a5c54ff53709d94f30e9b2e62b..548549817ab5a835c1ea66676bc75fa5 // Paper start - chunk tick iteration optimisations //this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing // Purpur { -@@ -548,8 +549,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -556,8 +557,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } //this.level.timings.broadcastChunkUpdates.stopTiming(); // Paper - timing // Purpur // Paper end - chunk tick iteration optimisations @@ -580,9 +581,9 @@ index 4aa9fbdf1eda91a5c54ff53709d94f30e9b2e62b..548549817ab5a835c1ea66676bc75fa5 + //gameprofilerfiller.pop(); // Purpur + //gameprofilerfiller.pop(); // Purpur } - } - -@@ -730,7 +731,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + + // Pufferfish start - optimize mob spawning +@@ -772,7 +773,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @Override protected void doRunTask(Runnable task) { @@ -592,7 +593,7 @@ index 4aa9fbdf1eda91a5c54ff53709d94f30e9b2e62b..548549817ab5a835c1ea66676bc75fa5 } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b730a4e922e 100644 +index 7ece40ea9ad3ba74b93250f72b42fc6299bedc82..29e31ed2d09aee3b668816a683ab0f89026fdf4f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -645,16 +645,16 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -678,7 +679,7 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 } org.spigotmc.ActivationRange.activateEntities(this); // Spigot -@@ -740,9 +740,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -741,9 +741,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); } else if (!tickratemanager.isEntityFrozen(entity)) { @@ -690,13 +691,19 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 if (true || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { // Paper - rewrite chunk system Entity entity1 = entity.getVehicle(); -@@ -754,22 +754,22 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -755,7 +755,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. entity.stopRiding(); } - gameprofilerfiller.push("tick"); + //gameprofilerfiller.push("tick"); // Purpur - this.guardEntityTick(this::tickNonPassenger, entity); + // Pufferfish start - copied from this.guardEntityTick + try { + this.tickNonPassenger(entity); // Pufferfish - changed +@@ -770,20 +770,20 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. + } + this.moonrise$midTickTasks(); // Paper - rewrite chunk system + // Pufferfish end - gameprofilerfiller.pop(); + //gameprofilerfiller.pop(); // Purpur } @@ -718,19 +725,18 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 } @Override -@@ -902,9 +902,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -916,8 +916,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. boolean flag = this.isRaining(); int j = chunkcoordintpair.getMinBlockX(); int k = chunkcoordintpair.getMinBlockZ(); - ProfilerFiller gameprofilerfiller = this.getProfiler(); -+ //ProfilerFiller gameprofilerfiller = this.getProfiler(); // Purpur - - gameprofilerfiller.push("thunder"); ++ //ProfilerFiller gameprofilerfiller = this.getProfiler(); // Purpur + //gameprofilerfiller.push("thunder"); // Purpur - 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 - BlockPos blockposition = this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15)); -@@ -941,7 +941,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. + 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 - Option to disable thunder // Pufferfish - replace random with shouldDoLightning + BlockPos blockposition = this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15)); +@@ -955,7 +955,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } } @@ -739,7 +745,7 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow for (int l = 0; l < randomTickSpeed; ++l) { -@@ -951,14 +951,14 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -965,14 +965,14 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } } // Paper - Option to disable ice and snow @@ -756,7 +762,7 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 } @VisibleForTesting -@@ -1304,19 +1304,19 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1318,19 +1318,19 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. //try { // Purpur // Paper end - timings entity.setOldPosAndRot(); @@ -781,7 +787,7 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 //} finally { timer.stopTiming(); } // Paper - timings // Purpur Iterator iterator = entity.getPassengers().iterator(); -@@ -1345,12 +1345,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1359,12 +1359,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; @@ -798,7 +804,7 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 // Paper start - EAR 2 if (isActive) { passenger.rideTick(); -@@ -1362,7 +1362,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1376,7 +1376,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. vehicle.positionRider(passenger); } // Paper end - EAR 2 @@ -808,10 +814,10 @@ index dc7db7a2c8b42f7ed2b7b28fe2ed6224be8da2fe..2c15fc6e4f46c5873cc5ce67edf10b73 while (iterator.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 3814486fe7cf7fb3c743345f6800e4b463aefe04..4c51f93c3d28ede9a8b811f88159cc19aaabc8b1 100644 +index 6482e1985654afea2e6d89fe0a9c2b6b7b3407fa..b3ed44884b7faa284effba5d257061be7fe72d2d 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1399,7 +1399,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1398,7 +1398,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.unsetRemoved(); */ // CraftBukkit end @@ -820,7 +826,7 @@ index 3814486fe7cf7fb3c743345f6800e4b463aefe04..4c51f93c3d28ede9a8b811f88159cc19 if (worldserver != null && resourcekey == LevelStem.OVERWORLD && worldserver.getTypeKey() == LevelStem.NETHER) { // CraftBukkit - empty to fall through to null to event this.enteredNetherPosition = this.position(); } -@@ -1415,8 +1415,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1414,8 +1414,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple worldserver = ((CraftWorld) exit.getWorld()).getHandle(); // CraftBukkit end @@ -831,7 +837,7 @@ index 3814486fe7cf7fb3c743345f6800e4b463aefe04..4c51f93c3d28ede9a8b811f88159cc19 // CraftBukkit start this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds LevelData worlddata = worldserver.getLevelData(); -@@ -1434,7 +1434,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1433,7 +1433,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); worldserver.addDuringTeleport(this); @@ -1067,10 +1073,10 @@ index a715ecf4a8ac91d3e5e5c6269d89e54b2c1cd279..223c3665126c576eddb1a8f7c9f5bc60 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0b47872b1 100644 +index 74c5b87a2a382e37db7e4c12470badcf9e07cf54..9911d937ddaa456157aeacfe3178ab7d10fa5a3b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -880,7 +880,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -889,7 +889,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public void baseTick() { @@ -1079,7 +1085,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.inBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -945,7 +945,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -954,7 +954,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess Leashable.tickLeash((Entity & Leashable) this); // CraftBukkit - decompile error } @@ -1088,7 +1094,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 } public void setSharedFlagOnFire(boolean onFire) { -@@ -1158,7 +1158,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1167,7 +1167,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1097,7 +1103,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1167,7 +1167,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1176,7 +1176,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity) && movement == getDeltaMovement() && movementType == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1106,7 +1112,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 return; } // Paper end -@@ -1188,8 +1188,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1197,8 +1197,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -1117,7 +1123,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1208,7 +1208,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1217,7 +1217,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition); if (this.isRemoved()) { @@ -1126,7 +1132,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1311,7 +1311,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1320,7 +1320,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -1135,7 +1141,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 } } // Paper start - detailed watchdog information -@@ -3303,7 +3303,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3312,7 +3312,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.processPortalCooldown(); if (this.portalProcess != null) { if (this.portalProcess.processPortalTeleportation(worldserver, this, this.canUsePortal(false))) { @@ -1144,7 +1150,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 this.setPortalCooldown(); DimensionTransition dimensiontransition = this.portalProcess.getPortalDestination(worldserver, this); -@@ -3315,7 +3315,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3324,7 +3324,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1153,7 +1159,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 } else if (this.portalProcess.hasExpired()) { this.portalProcess = null; } -@@ -3816,7 +3816,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3825,7 +3825,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1162,7 +1168,7 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 Entity entity2 = worldserver1.dimension() == worldserver.dimension() ? this : this.getType().create(worldserver1); if (entity2 != null) { -@@ -3852,7 +3852,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3861,7 +3861,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess teleportTarget.postDimensionTransition().onTransition(entity2); } @@ -1172,10 +1178,10 @@ index cf8e00378b0be5e78c6252e1850cb556424003b6..bc9a42b1dba6d089291e1b4d279933b0 } } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d4b4086c8 100644 +index 273ba284ef4f515ac7ca276264e17e04cdbe5b2e..943b4e93d1cfbb6b5d933851b2494fb6d28c32fc 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -445,7 +445,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -444,7 +444,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } super.baseTick(); @@ -1184,7 +1190,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d if (this.fireImmune() || this.level().isClientSide) { this.clearFire(); } -@@ -551,7 +551,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -550,7 +550,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO = this.yHeadRot; this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); @@ -1193,7 +1199,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d } @Override -@@ -3272,10 +3272,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3298,10 +3298,10 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.run += (f3 - this.run) * 0.3F; @@ -1207,7 +1213,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d // Paper start - stop large pitch and yaw changes from crashing the server this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -@@ -3287,7 +3287,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3313,7 +3313,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Paper end @@ -1216,7 +1222,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d this.animStep += f2; if (this.isFallFlying()) { ++this.fallFlyTicks; -@@ -3527,19 +3527,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3553,19 +3553,19 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.setDeltaMovement(d0, d1, d2); @@ -1241,7 +1247,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d if (this.jumping && this.isAffectedByFluids()) { double d3; -@@ -3566,8 +3566,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3592,8 +3592,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.noJumpDelay = 0; } @@ -1252,7 +1258,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d this.xxa *= 0.98F; this.zza *= 0.98F; this.updateFallFlying(); -@@ -3592,8 +3592,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3618,8 +3618,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.travel(vec3d1); } @@ -1263,7 +1269,7 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API int i = this.getTicksFrozen(); -@@ -3610,15 +3610,15 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3636,15 +3636,15 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().freeze(), 1.0F); } @@ -1283,10 +1289,10 @@ index 9582498c5cbcc859b942384e8e0e492cb2cdea03..94a1874576ed07bacdd399785666f69d // Purpur start if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 2166a9db0fd6c3c3cb3293c99e81b08f733089eb..ce43fadb49122f967891f532e6bfff0be9caf0a6 100644 +index 377f4311de40d702c53b0641376e6b2bddf33028..ff3d098d57d13d79d303e252874350e4b9ce161e 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -368,13 +368,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -370,13 +370,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @Override public void baseTick() { super.baseTick(); @@ -1302,7 +1308,7 @@ index 2166a9db0fd6c3c3cb3293c99e81b08f733089eb..ce43fadb49122f967891f532e6bfff0b incrementTicksSinceLastInteraction(); // Purpur } -@@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -706,7 +706,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @Override public void aiStep() { super.aiStep(); @@ -1311,7 +1317,7 @@ index 2166a9db0fd6c3c3cb3293c99e81b08f733089eb..ce43fadb49122f967891f532e6bfff0b if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { Vec3i baseblockposition = this.getPickupReach(); List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); -@@ -724,7 +724,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -726,7 +726,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } } @@ -1320,7 +1326,7 @@ index 2166a9db0fd6c3c3cb3293c99e81b08f733089eb..ce43fadb49122f967891f532e6bfff0b } protected Vec3i getPickupReach() { -@@ -944,44 +944,44 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -946,48 +946,48 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return; } // Paper end - Allow nerfed mobs to jump and float @@ -1337,22 +1343,26 @@ index 2166a9db0fd6c3c3cb3293c99e81b08f733089eb..ce43fadb49122f967891f532e6bfff0b if (i % 2 != 0 && this.tickCount > 1) { - gameprofilerfiller.push("targetSelector"); + //gameprofilerfiller.push("targetSelector"); // Purpur + if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.targetSelector.tickRunningGoals(false); - gameprofilerfiller.pop(); - gameprofilerfiller.push("goalSelector"); + //gameprofilerfiller.pop(); // Purpur + //gameprofilerfiller.push("goalSelector"); // Purpur + if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.goalSelector.tickRunningGoals(false); - gameprofilerfiller.pop(); + //gameprofilerfiller.pop(); // Purpur } else { - gameprofilerfiller.push("targetSelector"); + //gameprofilerfiller.push("targetSelector"); // Purpur + if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.targetSelector.tick(); - gameprofilerfiller.pop(); - gameprofilerfiller.push("goalSelector"); + //gameprofilerfiller.pop(); // Purpur + //gameprofilerfiller.push("goalSelector"); // Purpur + if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.goalSelector.tick(); - gameprofilerfiller.pop(); + //gameprofilerfiller.pop(); // Purpur @@ -1387,10 +1397,10 @@ index 2166a9db0fd6c3c3cb3293c99e81b08f733089eb..ce43fadb49122f967891f532e6bfff0b } 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 9bdbf3e9453bc3ce96d52d04b8cde0d05f7356d8..ff8fc5f0202b6176afef51e5b591fa6b7e4faee5 100644 +index e32c3120f9c5ddf429d8428c370ff61320a38de6..c943a00b401c4e9f2d97113ffe1f7c344455d086 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 -@@ -87,8 +87,8 @@ public class GoalSelector { +@@ -90,8 +90,8 @@ public class GoalSelector { } public void tick() { @@ -1401,7 +1411,7 @@ index 9bdbf3e9453bc3ce96d52d04b8cde0d05f7356d8..ff8fc5f0202b6176afef51e5b591fa6b for (WrappedGoal wrappedGoal : this.availableGoals) { if (wrappedGoal.isRunning() && (goalContainsAnyFlags(wrappedGoal, this.goalTypes) || !wrappedGoal.canContinueToUse())) { // Paper - Perf: optimize goal types by removing streams -@@ -97,8 +97,8 @@ public class GoalSelector { +@@ -100,8 +100,8 @@ public class GoalSelector { } this.lockedFlags.entrySet().removeIf(entry -> !entry.getValue().isRunning()); @@ -1412,7 +1422,7 @@ index 9bdbf3e9453bc3ce96d52d04b8cde0d05f7356d8..ff8fc5f0202b6176afef51e5b591fa6b for (WrappedGoal wrappedGoal2 : this.availableGoals) { // Paper start -@@ -118,13 +118,13 @@ public class GoalSelector { +@@ -121,13 +121,13 @@ public class GoalSelector { } } @@ -1429,7 +1439,7 @@ index 9bdbf3e9453bc3ce96d52d04b8cde0d05f7356d8..ff8fc5f0202b6176afef51e5b591fa6b for (WrappedGoal wrappedGoal : this.availableGoals) { if (wrappedGoal.isRunning() && (tickAll || wrappedGoal.requiresUpdateEveryTick())) { -@@ -132,7 +132,7 @@ public class GoalSelector { +@@ -135,7 +135,7 @@ public class GoalSelector { } } @@ -1474,16 +1484,16 @@ index 51772f03a3469b11e7166ec6f3a1b9c64a606221..02f2f46ccc48bb4d9bd08555818b0489 this.seen.add(i); } else { 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 902882ca639eee6efe102ea70e182fb17df801c2..0f9196cc26e5c670a7f3454326b762f0303f633c 100644 +index 498cd9cec1693445e98333c62052189bc276b1bb..62c62fd26660d8405378340315042d7b95ac7046 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 -@@ -260,13 +260,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS - +@@ -261,13 +261,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { - this.level().getProfiler().push("allayBrain"); + //this.level().getProfiler().push("allayBrain"); // Purpur - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); - this.level().getProfiler().pop(); - this.level().getProfiler().push("allayActivityUpdate"); @@ -1517,16 +1527,16 @@ index 75c05990b9ee6fd429c24415be3b98e258638e89..5b024bc6166a9034eeba729bf3a53236 this.playSound(SoundEvents.ARMADILLO_SCUTE_DROP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F); this.forceDrops = true; // CraftBukkit 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 091fbd162a63ec523197a953e65c00a54dae5ef9..e3178e2562a45f09c6567bb63112aa84fc59ea1d 100644 +index f7f37f71518f5a74eb872014e669e844cf01a15c..3359f492d6a8f193707e08768d73049454f178f4 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 -@@ -309,13 +309,13 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder> { - +@@ -238,13 +238,13 @@ public class Frog extends Animal implements VariantHolder> { + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { - this.level().getProfiler().push("frogBrain"); + //this.level().getProfiler().push("frogBrain"); // Purpur - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel)this.level(), this); - this.level().getProfiler().pop(); - this.level().getProfiler().push("frogActivityUpdate"); @@ -1584,16 +1594,16 @@ index b0f8115b328eda1e3571051870b5310c5a7e115a..ee8c232ddaa518377bdfa54e83ffc04f } 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 057096c5252e86d828a69080bdc70538e516ce99..0656e03bdd71f5d81853e817e136c8f11667c76e 100644 +index b05276065c977ea5eae3e74d15b2b5c90e352e61..5cd69dd546f42e80a3d3e3a674f65c2ac39f3af9 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 -@@ -122,13 +122,13 @@ public class Tadpole extends AbstractFish { - +@@ -123,13 +123,13 @@ public class Tadpole extends AbstractFish { + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { - this.level().getProfiler().push("tadpoleBrain"); + //this.level().getProfiler().push("tadpoleBrain"); // Purpur - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); - this.level().getProfiler().pop(); - this.level().getProfiler().push("tadpoleActivityUpdate"); @@ -1606,16 +1616,16 @@ index 057096c5252e86d828a69080bdc70538e516ce99..0656e03bdd71f5d81853e817e136c8f1 } 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 fab01a3e779e39962ef04305540e2fe3043072a2..4feddea8703d25a671fe11617f99e1fa9c1deaa2 100644 +index 9513f9ba6bb677536d2ec136ae5b2f5c091c4c93..1b298bfb440e5ddcc88b0b41e8c733b3883c5998 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 -@@ -224,13 +224,13 @@ public class Goat extends Animal { - +@@ -225,13 +225,13 @@ public class Goat extends Animal { + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { - this.level().getProfiler().push("goatBrain"); + //this.level().getProfiler().push("goatBrain"); // Purpur - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); - this.level().getProfiler().pop(); - this.level().getProfiler().push("goatActivityUpdate"); @@ -1683,16 +1693,16 @@ index ee9098f311b5db7251fcaf3ca199ae51ec1f2a2a..0d8e49e4f3c52244f8f84d6e4beeaa60 } 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 705385f5136ab6e063207004a045ed6a860b9903..ef263efa3ec00c36f938158356c34fb87c52c7bc 100644 +index 4b4a81f78d0f3e4a44b423e7c67423a7237cdeaf..6525155cdb5edb326b4f770e68400911ec25d95d 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 -@@ -193,10 +193,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - +@@ -194,10 +194,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + private int behaviorTick; // Pufferfish @Override protected void customServerAiStep() { - this.level().getProfiler().push("hoglinBrain"); + //this.level().getProfiler().push("hoglinBrain"); // Purpur - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel)this.level(), this); - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur @@ -1700,16 +1710,16 @@ index 705385f5136ab6e063207004a045ed6a860b9903..ef263efa3ec00c36f938158356c34fb8 if (this.isConverting()) { this.timeInOverworld++; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 02294488328707a7a67442669eeb48212c1452ab..6348d7a63b6fcfecc899fd7d1e0b941214acce01 100644 +index 63c2486b25c1fd88675e3cd9411f2b440c652700..e2b3256184b860b2f27fbcff4e09b70b43aedae8 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 -@@ -328,10 +328,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - +@@ -329,10 +329,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + private int behaviorTick; // Pufferfish @Override protected void customServerAiStep() { - this.level().getProfiler().push("piglinBrain"); + //this.level().getProfiler().push("piglinBrain"); // Purpur - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur @@ -1734,16 +1744,17 @@ index 5537f4e2bdce05ef5863955b9403eda7b04ec0d5..2f43bef3acd9db78ecc869f5ff0f4d0f PiglinBruteAi.maybePlayActivitySound(this); super.customServerAiStep(); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index ba560ab0340c06614547dcddbdcbd1bbda44bb79..6ee394c1616db9b0203b3e52e39234d064438654 100644 +index e8af1136b76704767e1ef1859968448c28e07f41..8e24cd9ed03e2f11da6f4fb2dd58dd9b9e5d7a06 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 -@@ -300,9 +300,10 @@ public class Warden extends Monster implements VibrationSystem { +@@ -301,10 +301,11 @@ public class Warden extends Monster implements VibrationSystem { protected void customServerAiStep() { ServerLevel worldserver = (ServerLevel) this.level(); - worldserver.getProfiler().push("wardenBrain"); + //worldserver.getProfiler().push("wardenBrain"); // Purpur + //if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - TODO: Move to Ridables patch + if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick(worldserver, this); - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur @@ -1751,10 +1762,10 @@ index ba560ab0340c06614547dcddbdcbd1bbda44bb79..6ee394c1616db9b0203b3e52e39234d0 if ((this.tickCount + this.getId()) % 120 == 0) { Warden.applyDarknessAround(worldserver, this.position(), this, 20); 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 d4f64414a0351999a04308a3d26d15c9ddf266c7..88972d9f07eb9088c139d9dbc974b2e61943f292 100644 +index 4af1857c4fbc18067b2fa0ae43501ce540630c6f..d58f845dc814011b8126cc641476b6e4e25bc328 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -342,7 +342,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -345,7 +345,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } protected void customServerAiStep(boolean inactive) { // Purpur - not final // Paper end @@ -1763,17 +1774,17 @@ index d4f64414a0351999a04308a3d26d15c9ddf266c7..88972d9f07eb9088c139d9dbc974b2e6 // Purpur start if (this.level().purpurConfig.villagerLobotomizeEnabled) { // treat as inactive if lobotomized -@@ -358,7 +358,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - this.getBrain().tick((ServerLevel) this.level(), this); // Paper +@@ -360,7 +360,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } - // Purpur end*/ // Purpur - TODO: Pufferfish + else if (this.isLobotomized && shouldRestock()) restock(); // Purpur + // Pufferfish end - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 6c66ee69beb55e5c5755bbf4d13c256541ce4468..28eafd9b22b745a940b4465aae01cb738a2d7002 100644 +index ad57bf49476192dea6a7367cbd0ad3f11e142e1b..07d480540c2c095e13de214cdf6866387d54837f 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -646,7 +646,7 @@ public class Explosion { @@ -1795,7 +1806,7 @@ index 6c66ee69beb55e5c5755bbf4d13c256541ce4468..28eafd9b22b745a940b4465aae01cb73 if (this.fire) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 9dd8378099b1ece5657adf1677f988ca331899b1..ed313b0424b2e1e1335ee3e3bd4d9cfd15f24b39 100644 +index e7642c30833d1efd159cd15429e1247022cfd511..26fbc981ec9acafc7ba1753759375c142261b6ab 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -269,7 +269,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1855,11 +1866,12 @@ index 9dd8378099b1ece5657adf1677f988ca331899b1..ed313b0424b2e1e1335ee3e3bd4d9cfd if (entityTypeTest instanceof net.minecraft.world.entity.EntityType byType) { if (maxCount != Integer.MAX_VALUE) { -@@ -1990,6 +1990,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1990,7 +1990,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl } public ProfilerFiller getProfiler() { -+ //if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur // Purpur - TODO: Pufferfish +- if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish ++ if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur return (ProfilerFiller) this.profiler.get(); } @@ -1886,10 +1898,10 @@ index 735f39fed209e086a52185565f8bd6873c0b8d6e..4dc060bc677984d91a30a88155c576d5 // Paper start - Add mobcaps commands 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 1d2986780d75272422e678cf25c9a31666ba8866..4666b51278dbe65b8e4911bcf1dbb867110c146f 100644 +index a0e6f39ba00212a078e04b21831a5ed22ad0825b..a4578ae22409edb686d0bcbac8cbc1a2e1d7b988 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -383,11 +383,11 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -397,11 +397,11 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p if (LightEngine.hasDifferentLightProperties(this, blockposition, iblockdata1, iblockdata)) { ProfilerFiller gameprofilerfiller = this.level.getProfiler(); @@ -1904,7 +1916,7 @@ index 1d2986780d75272422e678cf25c9a31666ba8866..4666b51278dbe65b8e4911bcf1dbb867 } boolean flag3 = iblockdata1.hasBlockEntity(); -@@ -1023,9 +1023,9 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1037,9 +1037,9 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p if (LevelChunk.this.isTicking(blockposition)) { try { @@ -1916,7 +1928,7 @@ index 1d2986780d75272422e678cf25c9a31666ba8866..4666b51278dbe65b8e4911bcf1dbb867 //this.blockEntity.tickTimer.startTiming(); // Spigot // Purpur BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); -@@ -1042,7 +1042,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1056,7 +1056,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p // Paper end - Remove the Block Entity if it's invalid } diff --git a/patches/server/0253-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0255-Add-more-logger-output-for-invalid-movement-kicks.patch similarity index 94% rename from patches/server/0253-Add-more-logger-output-for-invalid-movement-kicks.patch rename to patches/server/0255-Add-more-logger-output-for-invalid-movement-kicks.patch index d18048245..41a826f27 100644 --- a/patches/server/0253-Add-more-logger-output-for-invalid-movement-kicks.patch +++ b/patches/server/0255-Add-more-logger-output-for-invalid-movement-kicks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add more logger output for invalid movement kicks diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 95494ad10f18bb6b700e11b6c338a52ff5a880cc..3c038a992083f96b6406e786c5bb1177c1fe4c51 100644 +index 4db8975e8cb786042239c19f81c9b7f4637d010d..d7356a57de9c706de78c146ba93310c4dd30f41e 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -721,6 +721,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -16,7 +16,7 @@ index 95494ad10f18bb6b700e11b6c338a52ff5a880cc..3c038a992083f96b6406e786c5bb1177 this.disconnect((Component) Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1321,7 +1322,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1322,7 +1323,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); diff --git a/patches/server/0254-Add-Bee-API.patch b/patches/server/0256-Add-Bee-API.patch similarity index 100% rename from patches/server/0254-Add-Bee-API.patch rename to patches/server/0256-Add-Bee-API.patch diff --git a/patches/server/0255-Debug-Marker-API.patch b/patches/server/0257-Debug-Marker-API.patch similarity index 100% rename from patches/server/0255-Debug-Marker-API.patch rename to patches/server/0257-Debug-Marker-API.patch diff --git a/patches/server/0256-mob-spawning-option-to-ignore-creative-players.patch b/patches/server/0258-mob-spawning-option-to-ignore-creative-players.patch similarity index 100% rename from patches/server/0256-mob-spawning-option-to-ignore-creative-players.patch rename to patches/server/0258-mob-spawning-option-to-ignore-creative-players.patch diff --git a/patches/server/0257-Add-skeleton-bow-accuracy-option.patch b/patches/server/0259-Add-skeleton-bow-accuracy-option.patch similarity index 100% rename from patches/server/0257-Add-skeleton-bow-accuracy-option.patch rename to patches/server/0259-Add-skeleton-bow-accuracy-option.patch diff --git a/patches/server/0258-Add-death-screen-API.patch b/patches/server/0260-Add-death-screen-API.patch similarity index 100% rename from patches/server/0258-Add-death-screen-API.patch rename to patches/server/0260-Add-death-screen-API.patch diff --git a/patches/1-20-6/unapplied-server/0269-Make-pufferfish-config-relocatable.patch b/patches/server/0261-Make-pufferfish-config-relocatable.patch similarity index 83% rename from patches/1-20-6/unapplied-server/0269-Make-pufferfish-config-relocatable.patch rename to patches/server/0261-Make-pufferfish-config-relocatable.patch index c81d41c1e..aa6c6c0f7 100644 --- a/patches/1-20-6/unapplied-server/0269-Make-pufferfish-config-relocatable.patch +++ b/patches/server/0261-Make-pufferfish-config-relocatable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make pufferfish config relocatable diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -index 5a73aa17a963ae2d57e9bd5b5e3e5b0030d06216..8afc58f35deb49084a20b803e91ce4692ce6e4d6 100644 +index 92685ae1288fa509301c696bd7e49fcdab8062af..2acb11790036827fb6335b5a5337d367a0ba0854 100644 --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java @@ -28,6 +28,7 @@ public class PufferfishConfig { @@ -26,22 +26,22 @@ index 5a73aa17a963ae2d57e9bd5b5e3e5b0030d06216..8afc58f35deb49084a20b803e91ce469 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 6a9bd431e9c2e1fc1e51d394eaccba864bbeac89..85b861e21d8798a883ecbd0a09cc25f87e801b7b 100644 +index a3433ed1e8a15ec6336f99842bc80c62e81be792..dbfdb4bb7dd7ba139550e1ec4889d452507be511 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -230,6 +230,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -248,6 +248,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + org.purpurmc.purpur.PurpurConfig.registerCommands(); // Purpur end 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.pufferfishFile = (java.io.File) options.valueOf("pufferfish-settings"); // Purpur gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 1dd676ad37c68e3fce71306d7e05cb2c377a32b4..409c0e81571e23c9d535b541c61538424259d60a 100644 +index 260f79affee997adbe8d08f2a2cb3aa68083f497..4e58fd710ff9edfb4c1981c3e6e5417619e1e9c0 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 { +@@ -182,6 +182,12 @@ public class Main { .ofType(File.class) .defaultsTo(new File("purpur.yml")) .describedAs("Yml file"); diff --git a/patches/server/0259-Implement-ram-and-rambar-commands.patch b/patches/server/0262-Implement-ram-and-rambar-commands.patch similarity index 99% rename from patches/server/0259-Implement-ram-and-rambar-commands.patch rename to patches/server/0262-Implement-ram-and-rambar-commands.patch index 1c446c4c5..588ef43bd 100644 --- a/patches/server/0259-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0262-Implement-ram-and-rambar-commands.patch @@ -18,7 +18,7 @@ index 24cb04cd33cfe578286c85a892b20bbf3fc843e6..8468452ff61f226b65be1dad21b627f2 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index a85068c94c0ebad462b983fda73c9ba63e022e25..3fcacaa3fa604d139acd8e6a7bfcbc482ed27997 100644 +index b3ed44884b7faa284effba5d257061be7fe72d2d..ceb9c794345922772a69a867a96531167e881d24 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -305,6 +305,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -45,7 +45,7 @@ index a85068c94c0ebad462b983fda73c9ba63e022e25..3fcacaa3fa604d139acd8e6a7bfcbc48 nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -3101,5 +3104,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3100,5 +3103,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void compassBar(boolean compassBar) { this.compassBar = compassBar; } diff --git a/patches/server/0260-Configurable-block-blast-resistance.patch b/patches/server/0263-Configurable-block-blast-resistance.patch similarity index 100% rename from patches/server/0260-Configurable-block-blast-resistance.patch rename to patches/server/0263-Configurable-block-blast-resistance.patch diff --git a/patches/server/0261-Configurable-block-fall-damage-modifiers.patch b/patches/server/0264-Configurable-block-fall-damage-modifiers.patch similarity index 100% rename from patches/server/0261-Configurable-block-fall-damage-modifiers.patch rename to patches/server/0264-Configurable-block-fall-damage-modifiers.patch diff --git a/patches/server/0262-Language-API.patch b/patches/server/0265-Language-API.patch similarity index 100% rename from patches/server/0262-Language-API.patch rename to patches/server/0265-Language-API.patch diff --git a/patches/server/0263-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0266-Milk-Keeps-Beneficial-Effects.patch similarity index 96% rename from patches/server/0263-Milk-Keeps-Beneficial-Effects.patch rename to patches/server/0266-Milk-Keeps-Beneficial-Effects.patch index c43f5b161..8ee836d70 100644 --- a/patches/server/0263-Milk-Keeps-Beneficial-Effects.patch +++ b/patches/server/0266-Milk-Keeps-Beneficial-Effects.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Milk Keeps Beneficial Effects diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 94a1874576ed07bacdd399785666f69d4b4086c8..fa43300ba2110a85b67eb8ace6c67f2b27fb4ed9 100644 +index 7e3ed2cdd5898ebc33e392a3b4324021e6eba13d..3c8c5ef45306c80a59501adf5fd8bb36191ccc89 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1130,6 +1130,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1129,6 +1129,7 @@ public abstract class LivingEntity extends Entity implements Attackable { for (flag = false; iterator.hasNext(); flag = true) { // CraftBukkit start MobEffectInstance effect = (MobEffectInstance) iterator.next(); diff --git a/patches/server/0264-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch b/patches/server/0267-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch similarity index 100% rename from patches/server/0264-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch rename to patches/server/0267-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch diff --git a/patches/server/0265-Add-log-suppression-for-LibraryLoader.patch b/patches/server/0268-Add-log-suppression-for-LibraryLoader.patch similarity index 100% rename from patches/server/0265-Add-log-suppression-for-LibraryLoader.patch rename to patches/server/0268-Add-log-suppression-for-LibraryLoader.patch diff --git a/patches/server/0266-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/server/0269-Add-an-option-to-fix-MC-3304-projectile-looting.patch similarity index 100% rename from patches/server/0266-Add-an-option-to-fix-MC-3304-projectile-looting.patch rename to patches/server/0269-Add-an-option-to-fix-MC-3304-projectile-looting.patch diff --git a/patches/server/0267-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch similarity index 100% rename from patches/server/0267-Add-option-to-allow-creeper-to-encircle-target-when-.patch rename to patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch diff --git a/patches/server/0268-Fire-Immunity-API.patch b/patches/server/0271-Fire-Immunity-API.patch similarity index 84% rename from patches/server/0268-Fire-Immunity-API.patch rename to patches/server/0271-Fire-Immunity-API.patch index ac0dfde64..bde452c20 100644 --- a/patches/server/0268-Fire-Immunity-API.patch +++ b/patches/server/0271-Fire-Immunity-API.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 17b883484b83db75454e3b004da3a8adc0506c0e..3e8caea44bd55d7d13c66ffb3e87a9877067d9d6 100644 +index 9911d937ddaa456157aeacfe3178ab7d10fa5a3b..d383a8c3c9d3ba5fc191826b869227612f04b461 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -430,6 +430,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - private UUID originWorld; - public boolean freezeLocked = false; // Paper - Freeze Tick Lock API - public boolean fixedPose = false; // Paper - Expand Pose API +@@ -433,6 +433,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + public boolean activatedPriorityReset = false; // Pufferfish - DAB + public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // Pufferfish - DAB (golf score) + public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // Pufferfish - reduce entity allocations + public @Nullable Boolean immuneToFire = null; // Purpur - Fire immune API public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -1869,7 +1870,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1878,7 +1879,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -25,7 +25,7 @@ index 17b883484b83db75454e3b004da3a8adc0506c0e..3e8caea44bd55d7d13c66ffb3e87a987 } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2578,6 +2579,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2587,6 +2588,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -37,7 +37,7 @@ index 17b883484b83db75454e3b004da3a8adc0506c0e..3e8caea44bd55d7d13c66ffb3e87a987 return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2725,6 +2731,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2734,6 +2740,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end diff --git a/patches/server/0269-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch similarity index 94% rename from patches/server/0269-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch rename to patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index 067df0bb0..b4a12e3f2 100644 --- a/patches/server/0269-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn on nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 3e8caea44bd55d7d13c66ffb3e87a9877067d9d6..0e501c7797ec30b3c27ec19abb4fc782c0c2843e 100644 +index d383a8c3c9d3ba5fc191826b869227612f04b461..e3e71558d9d99fa878511f051d1d8592f8684ac0 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -959,6 +959,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -968,6 +968,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage diff --git a/patches/server/0270-Added-got-ram-event.patch b/patches/server/0273-Added-got-ram-event.patch similarity index 86% rename from patches/server/0270-Added-got-ram-event.patch rename to patches/server/0273-Added-got-ram-event.patch index ed9151652..5a1c62812 100644 --- a/patches/server/0270-Added-got-ram-event.patch +++ b/patches/server/0273-Added-got-ram-event.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Added got ram event 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 4feddea8703d25a671fe11617f99e1fa9c1deaa2..aa548cba6134652751d73b6774e88f9f6d9ee0ed 100644 +index 1b298bfb440e5ddcc88b0b41e8c733b3883c5998..004a0212540c0a9061eb3aed458857d3da4c1c3d 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 -@@ -428,6 +428,7 @@ public class Goat extends Animal { +@@ -429,6 +429,7 @@ public class Goat extends Animal { // Paper start - Goat ram API public void ram(net.minecraft.world.entity.LivingEntity entity) { diff --git a/patches/server/0271-Log-skipped-entity-s-position.patch b/patches/server/0274-Log-skipped-entity-s-position.patch similarity index 86% rename from patches/server/0271-Log-skipped-entity-s-position.patch rename to patches/server/0274-Log-skipped-entity-s-position.patch index 7667df401..634716115 100644 --- a/patches/server/0271-Log-skipped-entity-s-position.patch +++ b/patches/server/0274-Log-skipped-entity-s-position.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Log skipped entity's position diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 9cac9f5989cd8f73f247e4a3f901a54c03bc00ef..b4f4addfd35a1961a237fc0ab83e6285a0faeaee 100644 +index bad5b622477a637440649ec18ea5a79c321bc523..d3de0362dd1ef3954d05c4d8fa56a25edfe1bb2b 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -625,6 +625,12 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -627,6 +627,12 @@ public class EntityType implements FeatureElement, EntityTypeT entity.load(nbt); }, () -> { EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id")); diff --git a/patches/server/0272-End-Crystal-Cramming.patch b/patches/server/0275-End-Crystal-Cramming.patch similarity index 100% rename from patches/server/0272-End-Crystal-Cramming.patch rename to patches/server/0275-End-Crystal-Cramming.patch diff --git a/patches/server/0273-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch similarity index 100% rename from patches/server/0273-Option-to-allow-beacon-effects-when-covered-by-tinte.patch rename to patches/server/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch diff --git a/patches/server/0274-Add-attribute-clamping-and-armor-limit-config.patch b/patches/server/0277-Add-attribute-clamping-and-armor-limit-config.patch similarity index 100% rename from patches/server/0274-Add-attribute-clamping-and-armor-limit-config.patch rename to patches/server/0277-Add-attribute-clamping-and-armor-limit-config.patch diff --git a/patches/server/0275-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0278-Config-to-remove-explosion-radius-clamp.patch similarity index 100% rename from patches/server/0275-Config-to-remove-explosion-radius-clamp.patch rename to patches/server/0278-Config-to-remove-explosion-radius-clamp.patch diff --git a/patches/server/0276-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0279-bonemealable-sugarcane-cactus-and-netherwart.patch similarity index 100% rename from patches/server/0276-bonemealable-sugarcane-cactus-and-netherwart.patch rename to patches/server/0279-bonemealable-sugarcane-cactus-and-netherwart.patch diff --git a/patches/server/0277-Add-PreExplodeEvents.patch b/patches/server/0280-Add-PreExplodeEvents.patch similarity index 100% rename from patches/server/0277-Add-PreExplodeEvents.patch rename to patches/server/0280-Add-PreExplodeEvents.patch diff --git a/patches/server/0278-Improve-output-of-plugins-command.patch b/patches/server/0281-Improve-output-of-plugins-command.patch similarity index 100% rename from patches/server/0278-Improve-output-of-plugins-command.patch rename to patches/server/0281-Improve-output-of-plugins-command.patch diff --git a/patches/server/0279-Make-GUI-Great-Again.patch b/patches/server/0282-Make-GUI-Great-Again.patch similarity index 99% rename from patches/server/0279-Make-GUI-Great-Again.patch rename to patches/server/0282-Make-GUI-Great-Again.patch index 2ec67a52b..af8cb8771 100644 --- a/patches/server/0279-Make-GUI-Great-Again.patch +++ b/patches/server/0282-Make-GUI-Great-Again.patch @@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 9b8e989600eedbbba20ec41737a3c8f9bf3faaf0..744cfc91fa8b78794f1edab1f81035b21bf0c83f 100644 +index dbfdb4bb7dd7ba139550e1ec4889d452507be511..2762f54515b352271feb4b26f506b06cd0fb1909 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -114,6 +114,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/patches/server/0280-Stored-Bee-API.patch b/patches/server/0283-Stored-Bee-API.patch similarity index 100% rename from patches/server/0280-Stored-Bee-API.patch rename to patches/server/0283-Stored-Bee-API.patch diff --git a/patches/server/0281-Shears-can-defuse-TNT.patch b/patches/server/0284-Shears-can-defuse-TNT.patch similarity index 100% rename from patches/server/0281-Shears-can-defuse-TNT.patch rename to patches/server/0284-Shears-can-defuse-TNT.patch diff --git a/patches/server/0282-Explorer-Map-API.patch b/patches/server/0285-Explorer-Map-API.patch similarity index 100% rename from patches/server/0282-Explorer-Map-API.patch rename to patches/server/0285-Explorer-Map-API.patch diff --git a/patches/server/0283-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/server/0286-Option-Ocelot-Spawn-Under-Sea-Level.patch similarity index 100% rename from patches/server/0283-Option-Ocelot-Spawn-Under-Sea-Level.patch rename to patches/server/0286-Option-Ocelot-Spawn-Under-Sea-Level.patch diff --git a/patches/server/0284-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0287-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch similarity index 100% rename from patches/server/0284-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch rename to patches/server/0287-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch diff --git a/patches/server/0285-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/server/0288-Add-option-for-always-showing-item-in-player-death-m.patch similarity index 100% rename from patches/server/0285-Add-option-for-always-showing-item-in-player-death-m.patch rename to patches/server/0288-Add-option-for-always-showing-item-in-player-death-m.patch diff --git a/patches/server/0286-place-end-crystal-on-any-block.patch b/patches/server/0289-place-end-crystal-on-any-block.patch similarity index 96% rename from patches/server/0286-place-end-crystal-on-any-block.patch rename to patches/server/0289-place-end-crystal-on-any-block.patch index 3cbf0ca73..14bdd4bb7 100644 --- a/patches/server/0286-place-end-crystal-on-any-block.patch +++ b/patches/server/0289-place-end-crystal-on-any-block.patch @@ -5,7 +5,7 @@ Subject: [PATCH] place end crystal on any block diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java -index 5f51e64cb0611a4ba6bdcdcacbcba1063a7f3a5c..8fb564f43e2f1194d2ad68d35c4df6b921d50cfc 100644 +index cc1e5882bee94864ad189d7f01ce78223411e51d..4c827c26656ac487cc8c66eeb67e4f38a29fec36 100644 --- a/src/main/java/net/minecraft/world/item/EndCrystalItem.java +++ b/src/main/java/net/minecraft/world/item/EndCrystalItem.java @@ -27,7 +27,7 @@ public class EndCrystalItem extends Item { diff --git a/patches/server/0287-Add-option-to-disable-the-copper-oxidation-proximity.patch b/patches/server/0290-Add-option-to-disable-the-copper-oxidation-proximity.patch similarity index 100% rename from patches/server/0287-Add-option-to-disable-the-copper-oxidation-proximity.patch rename to patches/server/0290-Add-option-to-disable-the-copper-oxidation-proximity.patch diff --git a/patches/server/0288-register-minecraft-debug-commands.patch b/patches/server/0291-register-minecraft-debug-commands.patch similarity index 100% rename from patches/server/0288-register-minecraft-debug-commands.patch rename to patches/server/0291-register-minecraft-debug-commands.patch diff --git a/patches/server/0289-Configurable-villager-search-radius.patch b/patches/server/0292-Configurable-villager-search-radius.patch similarity index 100% rename from patches/server/0289-Configurable-villager-search-radius.patch rename to patches/server/0292-Configurable-villager-search-radius.patch diff --git a/patches/server/0290-option-to-make-ravagers-afraid-of-rabbits.patch b/patches/server/0293-option-to-make-ravagers-afraid-of-rabbits.patch similarity index 100% rename from patches/server/0290-option-to-make-ravagers-afraid-of-rabbits.patch rename to patches/server/0293-option-to-make-ravagers-afraid-of-rabbits.patch diff --git a/patches/server/0291-config-for-startup-commands.patch b/patches/server/0294-config-for-startup-commands.patch similarity index 93% rename from patches/server/0291-config-for-startup-commands.patch rename to patches/server/0294-config-for-startup-commands.patch index ef2f10735..994c3f20e 100644 --- a/patches/server/0291-config-for-startup-commands.patch +++ b/patches/server/0294-config-for-startup-commands.patch @@ -5,10 +5,10 @@ Subject: [PATCH] config for startup commands diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index cdb5b001ec3104a04da9a160c6c4db532c3508e1..c56ffd2307b9c92742f760a51e16e48f3205f793 100644 +index 1089238297ee7d129d71553205574f54737f1acc..6fb35c36d964c96a42911b8a9e11590aaa5cca59 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1264,6 +1264,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop