Skip to content
๐‘ฉ๐’Š๐’’๐’–๐’‚๐’•๐’†๐’“๐’๐’Š๐’๐’๐’” edited this page Jun 26, 2025 · 12 revisions

Welcome to the Puffernot wiki!

Similar to the official Pufferfish project, you can configure it in the pufferfish.yml file found in the same directory as the server jar!

Before starting, you might want to give the official configuration guide a look:
https://docs.pufferfish.host/setup/pufferfish-fork-configuration/
Pufferfish inherited some of its patches from Airplane, while it is no longer around, its documentation explains in a bit more detail some of its features:
https://blog.airplane.gg/about/

A few notes before starting

As a server owner, you should be aware of the of the features the software you're running has and the effects it has on gameplay.
Please, read this guide consciously to understand what are you enabling and how to toggle on/off features you need or don't, or features that modify negatively the gameplay in your server.
Keep in mind that, not all optimizations come freely and require to change gameplay.
At the end of the end of this guide, I expect you to be a little bit familiar with the configurations that do have an impact on gameplay, which side-effects they have and the consequences.

Tip

Remember that not all non-vanilla behaviors are "evil", most players won't notice any difference or the situations where those become relevant are rare, hard to pull off and/or just worth for the performance increase.
Pufferfish is known for keeping a smooth gameplay without completely compromising the core mechanics.
You might've been using the original Pufferfish for years, completely unaware of the side-effects up until now!
That's how unnoticeable the side-effects are!

Configuration

๐Ÿ“– Books: enable-books

Allows every user to write books, its main purpose is to allow servers sensitive to duping exploits to prevent book-related exploits.
At the time this patch was created, most of the duping exploits were (and some still are) centered around books.

๐ŸŸซ Suffocation optimization: enable-suffocation-optimization

Instead of checking if entities are being suffocated, this patch prevents the server from checking for suffocation every tick.
Part of the suffocation check (LivingEntity#isInWall) is very expensive and completely pointless most of the time, since living entities are completely invulnerable for a while after getting damaged.
This config allows the server to skip the ticks where the entity might be invulnerable, its completely unnoticeable but a toggle was provided in case the slight difference from vanilla (<1%) is not desirable.
This patch does not affect the Wither.

๐Ÿงต Async Mob Spawning: enable-async-mob-spawning

One of the signature features of both Airplane and Pufferfish.
It offloads part of the mob spawning process into a different thread.

Side effects

  1. It can slightly reduce/increase the amount of mobs being spawned in any particular tick.

Ticks take 0.05 second, so the difference is not noticeable for the human eye, nor for automated farms.

๐Ÿน Projectiles: projectile

Configurations for chunk-loading by projectiles, allows to control the limit of chunks a projectile can load per-tick, by both limiting the projectile movement or discarding it.

Details

  1. projectile.max-loads-per-tick Amount of chunks that are allowed to be loaded by projectiles in a single tick, if exceeded projectiles won't keep moving forward.
  2. projectile.max-loads-per-projectile Amount of chunks a projectile can load before being deleted.

๐Ÿง  Dynamic Activation of Brain: dab

Original guide: https://blog.airplane.gg/dear-configuration/
One of the signature features of both Airplane and Pufferfish.
DAB or DEAR (Dynamic Entity Activation Range) is a feature similar in concept to LOD in game development, but used to limit the amount of Brain activations for every mob (that has one) depending of their relative distance to the player.
Despite its name, DAB also limits goal targeting and path finding decisions of mobs, even if they don't have a Brain.

Mobs slightly far away will tick once every 2 ticks, then 4 ticks, and the furthest ones once every 16 ticks

Side effects

  1. Mob farms that require mobs to move themselves to fall into a trap (like Creeper farms) will reduce their output if players are not close to the farm.
  2. Mobs with a Brain might drown if they're far away from the player.

This optimization is completely unnoticeable for the naked eye, unless you intentionally create the appropriate conditions.
However, it will be noticeable for mob farms and your console when Villagers drown.

Villager only sinks after it's too far away

Possible fixes

It is possible to prevent mobs from drowning if an additional validation (LivingEntity#wasInWater) is made before skipping the Brain tick on every non-aquatic entity with a Brain.
This goes against the original Pufferfish patch so it won't be fixed here, feel free to make a fork and edit the patch.
Besides mobs in the wilderness, there are few-to-no scenarios where players will keep their Villagers floating in deep enough water for them to drown, so there's no real reason to fix it and lose some performance.

Details

  1. dab.start-distance the distance (in blocks) at which entities within this range will tick normally, any entity outside this range will start to be affected by DEAR.
  2. dab.max.tick.freq how often the furthest entity will tick its Brain or AI goals. No entities will tick slower than this. Lower values will make the entity tick faster, higher will tick slower.
  3. dab.activation-dist-mod how much the distance affects the tick frequency, lower values will make frequency decrease, higher will make it increase. The frequency will not exceed max.tick.freq.
  4. dab.blacklisted-entities a list of entities that will not be affected by DEAR, adding "minecraft:villager" will make villagers unaffected.

โœˆ๏ธ Flare flare

Original guide: https://blog.airplane.gg/flare-tutorial/
One of the signature features of both Airplane and Pufferfish.
Flare is Airplane's async profiler, similar to spark but focused on analyzing the impact in performance in multiple threads.
Flare has always been one of the selling points (paywalled) of both Airplane and Pufferfish, which only Pufferfish Host's instance remains to this day.
If you have access to a Flare instance, you might want to add -XX:+UnlockDiagnosticVMOptions and -XX:+DebugNonSafepoints to your startup flags to improve profile accuracy.

Details

  1. flare.url The url at which the profiler will send its data and create a web report that you can open in the browser, similar to spark.
  2. web-services.token The flare token used to access your Flare instance.

โฑ๏ธ Method profiler: disable-method-profiler

Minecraft, by default, has a built-in profiler, which can take a little bit of execution time.
This option allows you to disable said profiler to save this time, since it's not something you'd use in production.

image

The profiler code remains there, but will not do anything

โŒ Inactive goal selector throttle: inactive-goal-selector-throttle

Throttles the AI goal selector when the entity is not active, which can improve performance a little.

Side effects

  1. Entities might take a bit to react.

This optimization is completely unnoticeable for the naked eye

๐Ÿ’จ Tps Catchup: tps-catchup

Speeds up the server a little after a lagspike, helps to keep up the tps count at 20.0

Side effects

  1. Mobs can also speed-up after said lagspike.

๐Ÿ”ฎ End Crystal Respawn: allow-end-crystal-respawn

Allows using End Crystals to respawn the Ender Dragon.
This patch was specifically made for servers that have end-crystal fights in the end dimension, since every crystal placed there will pointlessly try to respawn the dragon with no success, which is an expensive operation (EndDragonFight#tryRespawn).

๐Ÿ›ก๏ธ Sentry: sentry-dsn

Sentry is an application monitoring software that is built-in into Pufferfish.
Pufferfish will send Log4j logs above WARN level (ERROR and SEVERE) to Sentry with additional information, which can provide you and your developers some insight on the what could've caused the error.
Keeps track of when the error happened, links to past errors to help you classify it as incident or problem, optionally notify you vรญa e-mail when an error occurred and much more. Overall, an amazing tool to have in your server.

image