@@ -625,7 +625,7 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473
625625+ }
626626diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
627627new file mode 100644
628- index 0000000000000000000000000000000000000000..ad368b58005b6b0453b709c2ef0ea23bca53d34a
628+ index 0000000000000000000000000000000000000000..f6a3364175476c57a7763a087ff55e1689474800
629629--- /dev/null
630630+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
631631@@ -0,0 +1,301 @@
@@ -921,13 +921,13 @@ index 0000000000000000000000000000000000000000..ad368b58005b6b0453b709c2ef0ea23b
921921+ "the ender dragon whenever a player places an end crystal.");
922922+ }
923923+
924- + public static boolean disableMethodProfiler;
924+ + public static boolean disableMethodProfiler;
925925+ public static boolean disableOutOfOrderChat;
926- + private static void miscSettings() {
926+ + private static void miscSettings() {
927927+ disableMethodProfiler = getBoolean("misc.disable-method-profiler", true);
928928+ disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", false);
929- + setComment("misc", "Settings for things that don't belong elsewhere");
930- + }
929+ + setComment("misc", "Settings for things that don't belong elsewhere");
930+ + }
931931+
932932+ }
933933diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishLogger.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishLogger.java
@@ -1497,19 +1497,18 @@ index ba12919c3f9aec34a9e64993b143ae92be5eb172..9efeab9078e2d08903e482718b840797
14971497 } else {
14981498 this.lastTimeStamp = body.timeStamp();
14991499diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
1500- index 90ae7e8c81f6a9ede8aeaeec3bf784023522cefc..f1944d77aa1d5901c563108099a196ec1e598128 100644
1500+ index 90ae7e8c81f6a9ede8aeaeec3bf784023522cefc..1dc91ef47d336abe06be1cfd90e8164605e5f37e 100644
15011501--- a/src/main/java/net/minecraft/server/MinecraftServer.java
15021502+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
1503- @@ -313,6 +313,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1503+ @@ -312,6 +312,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1504+ public volatile Thread shutdownThread; // Paper
15041505 public volatile boolean abnormalExit = false; // Paper
15051506 public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
1506-
15071507+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning
1508- +
1508+
15091509 public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
15101510 AtomicReference<S> atomicreference = new AtomicReference();
1511- Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system
1512- @@ -1219,6 +1221,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1511+ @@ -1219,6 +1220,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15131512 this.profiler.popPush("nextTickWait");
15141513 this.mayHaveDelayedTasks = true;
15151514 this.delayedTasksMaxNextTickTimeNanos = Math.max(Util.getNanos() + i, this.nextTickTimeNanos);
@@ -1522,16 +1521,16 @@ index 90ae7e8c81f6a9ede8aeaeec3bf784023522cefc..f1944d77aa1d5901c563108099a196ec
15221521 this.waitUntilNextTick();
15231522 if (flag) {
15241523 this.tickRateManager.endTickWork();
1525- @@ -1855,7 +1863 ,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1524+ @@ -1855,7 +1862 ,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15261525
15271526 @DontObfuscate
15281527 public String getServerModName() {
15291528- return "Paper"; // Paper
1530- + return "Pufferfish"; // Pufferfish - Pufferfish > // Paper
1529+ + return "Pufferfish"; // Pufferfish > // Paper
15311530 }
15321531
15331532 public SystemReport fillSystemReport(SystemReport details) {
1534- @@ -2442,6 +2450 ,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1533+ @@ -2442,6 +2449 ,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15351534 }
15361535
15371536 public ProfilerFiller getProfiler() {
@@ -1613,7 +1612,7 @@ index 5a7278b093e37b95fb005ad5cc3cac90ac36f8fb..28d05b46952397bb664a1c8dae71816c
16131612 return this.scaledRange(i);
16141613 }
16151614diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
1616- index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..097f6eb96c2df203565a0c50aba6221e67a7e026 100644
1615+ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..1cf8c819c0d7776c3b33d6594ca81abe3c2a719d 100644
16171616--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
16181617+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
16191618@@ -77,6 +77,9 @@ public class ServerChunkCache extends ChunkSource {
@@ -1679,7 +1678,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..097f6eb96c2df203565a0c50aba6221e
16791678 gameprofilerfiller.pop();
16801679 gameprofilerfiller.pop();
16811680 }
1682- +
1681+ +
16831682+ // Pufferfish start - optimize mob spawning
16841683+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) {
16851684+ for (ServerPlayer player : this.level.players) {
@@ -1919,7 +1918,7 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4c
19191918 int LARGE_MAX_STACK_SIZE = 64;
19201919 int DEFAULT_DISTANCE_LIMIT = 8;
19211920diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
1922- index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da875603b6ce11b 100644
1921+ index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..1d9331fe9ce7308eda2e7da2ae726810d455f090 100644
19231922--- a/src/main/java/net/minecraft/world/entity/Entity.java
19241923+++ b/src/main/java/net/minecraft/world/entity/Entity.java
19251924@@ -308,7 +308,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -1931,20 +1930,17 @@ index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da87560
19311930 private ChunkPos chunkPosition;
19321931 private Vec3 deltaMovement;
19331932 private float yRot;
1934- @@ -501,6 +501,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
1935- return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this));
1936- }
1937- // Paper end - optimise entity tracking
1938- + // Pufferfish start
1939- + public boolean activatedPriorityReset = false; // DAB
1940- + public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score
1941- + public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed
1942- + // Pufferfish end
1943- +
1944- public float getBukkitYaw() {
1945- return this.yRot;
1946- }
1947- @@ -807,6 +813,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
1933+ @@ -423,6 +423,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
1934+ private UUID originWorld;
1935+ public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
1936+ public boolean fixedPose = false; // Paper - Expand Pose API
1937+ + public boolean activatedPriorityReset = false; // Pufferfish - DAB
1938+ + public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // Pufferfish - DAB (golf score)
1939+ + public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // Pufferfish - reduce entity allocations
1940+
1941+ public void setOrigin(@javax.annotation.Nonnull Location location) {
1942+ this.origin = location.toVector();
1943+ @@ -807,6 +810,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
19481944 }
19491945
19501946 public void tick() {
@@ -1957,7 +1953,7 @@ index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da87560
19571953 this.baseTick();
19581954 }
19591955
1960- @@ -4402,16 +4414 ,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
1956+ @@ -4402,16 +4411 ,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
19611957 }
19621958
19631959 public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tag, double speed) {
@@ -1983,7 +1979,7 @@ index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da87560
19831979 double d1 = 0.0D;
19841980 boolean flag = this.isPushedByFluid();
19851981 boolean flag1 = false;
1986- @@ -4419,14 +4433 ,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
1982+ @@ -4419,14 +4430 ,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
19871983 int k1 = 0;
19881984 BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
19891985
@@ -2051,7 +2047,7 @@ index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da87560
20512047
20522048 if (d2 >= axisalignedbb.minY) {
20532049 flag1 = true;
2054- @@ -4448,9 +4509 ,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
2050+ @@ -4448,9 +4506 ,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
20552051 // CraftBukkit end
20562052 }
20572053 }
@@ -2262,7 +2258,7 @@ index 07519c817cc6de04a98198c43a0c2b02ba3141eb..ee66be6e5aa45ec8448b6d30785a6e71
22622258 this.blockPos = mutableBlockPos;
22632259 this.mob.movingTarget = mutableBlockPos == BlockPos.ZERO ? null : mutableBlockPos.immutable(); // Paper
22642260diff --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
2265- index c8a80c1b2fedff22e8a877d466062375ffb2f0d7..3c4f4af85a3f2d4f9f52827164e63727b916c33a 100644
2261+ index c8a80c1b2fedff22e8a877d466062375ffb2f0d7..931cbbe41905d7ed3fd46c53d3ddd06a6b9a7c8a 100644
22662262--- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
22672263+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
22682264@@ -75,9 +75,18 @@ public class TargetingConditions {
@@ -2281,7 +2277,7 @@ index c8a80c1b2fedff22e8a877d466062375ffb2f0d7..3c4f4af85a3f2d4f9f52827164e63727
22812277+ }
22822278+
22832279+ double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0D;
2284- + double e = Math.max((followRangeRaw) * d, 2.0D); // Paper
2280+ + double e = Math.max((followRangeRaw) * d, 2.0D); // Paper - Fix MC-145656
22852281+ // Pufferfish end
22862282 if (f > e * e) {
22872283 return false;
@@ -2701,19 +2697,19 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..a097cfc528f709c80575f35483b68783
27012697 autorecipestackmanager.initialize(this); // Paper - better exact choice recipes
27022698 int i = 0;
27032699diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
2704- index 8f437225d2a4e08ca47873cd42277d9f0f9f5529..c84adb9f9bb1d6a81d4007b1ab292b133fc34cfb 100644
2700+ index 8f437225d2a4e08ca47873cd42277d9f0f9f5529..c10efc14ca83f07b27a2f12776ab2fd2a953c5a1 100644
27052701--- a/src/main/java/net/minecraft/world/level/Level.java
27062702+++ b/src/main/java/net/minecraft/world/level/Level.java
2707- @@ -212,6 +212,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
2703+ @@ -211,6 +211,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
2704+ // Paper end - Use getChunkIfLoadedImmediately
27082705
27092706 public abstract ResourceKey<LevelStem> getTypeKey();
2710-
2707+ +
27112708+ 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
2712- +
2709+
27132710 protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> 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<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor
27142711 this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
2715- this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config
2716- @@ -1313,13 +1315,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
2712+ @@ -1313,14 +1315,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
27172713 try {
27182714 tickConsumer.accept(entity);
27192715 MinecraftServer.getServer().executeMidTickTasks(); // Paper - execute chunk tasks mid tick
@@ -2725,10 +2721,12 @@ index 8f437225d2a4e08ca47873cd42277d9f0f9f5529..c84adb9f9bb1d6a81d4007b1ab292b13
27252721 MinecraftServer.LOGGER.error(msg, throwable);
27262722 getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent
27272723- entity.discard();
2724+ - // Paper end - Prevent block entity and entity crashes
27282725+ entity.discard(); // Pufferfish - diff on change ServerLevel.tick
2729- // Paper end - Prevent block entity and entity crashes
2726+ + // Paper end
27302727 }
27312728 }
2729+ // Paper start - Option to prevent armor stands from doing entity lookups
27322730@@ -1793,6 +1795,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
27332731 }
27342732
@@ -3273,7 +3271,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7
32733271
32743272 @Nullable
32753273diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
3276- index b83c2f1e0ea117eecda94cb51b0ea5bba4d7ab5e..325a097426bcc5e7024ee9559b14c337e35339e3 100644
3274+ index 34cd96dba5f11e64d7c90f4246b513b0ea943aa6..8344f9f693879639c484edf575c7df14df616776 100644
32773275--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
32783276+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
32793277@@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper
@@ -3310,7 +3308,7 @@ index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e21
33103308 }
33113309 }
33123310diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
3313- index 4e1390b9244aeb745ffd3fd1257bc74248722515..e04d721765648a2b5f5bf1f2053e344bfb92f0f4 100644
3311+ index ca5312febcdd467889ad725c0263367bc5fe69f6..91992a5e329ea335d9e60543f9636cb5c3620a0e 100644
33143312--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
33153313+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
33163314@@ -482,7 +482,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
0 commit comments