Перейти к содержимому
Mineforgian

FPSFlow

Improve FPS with smart rendering, entity culling, adaptive optimizations, and configurable performance profiles

Загрузки
9K
Подписчики
13
Обновлён
29 июля 2026 г.
Лицензия
AGPL-3.0-only

Опубликован 8 июня 2026 г.

FPSFlow

Real FPS improvements — no placebo, no bloat.

FPSFlow is a client-side Fabric optimization mod that targets the biggest rendering bottlenecks in vanilla Minecraft. Every feature is measurably effective, individually toggleable, and automatically adjusts to your hardware via four built-in performance profiles.


✦ Features at a Glance

Feature What it does
🔍 Entity Culling Frustum, occlusion, and distance culling. Dual-point raycasting prevents false-positives on small entities. Auto-disables when EntityCulling is detected.
📐 Entity LOD Entities beyond a configurable distance render every 2nd tick. Server NPCs and entities within nameplate range are always fully exempt — no flicker, even in busy lobbies.
🏷️ Nameplate Culling Hides name tags beyond a configurable distance. Server-forced labels are never hidden.
🧱 Block Entity Culling Skips chests, furnaces, signs, banners, and item frames beyond the configured range.
Particle Optimization Count cap + three-zone density LOD (full / ~50 % / none) based on distance from player.
🖼️ Painting Back-Face Culling Instantly skips paintings when the camera is behind them — they are never visible from the back.
🌙 Background FPS Limiter Caps frame rate when the window loses focus, is minimised, or on any loading/menu screen (reduces GPU spinning during startup).
🌍 Singleplayer Boost More aggressive adaptive culling in singleplayer — frees CPU for chunk generation threads so exploration stays smooth.
World Join Optimizer Culling distances ramp up from 35 % on join and return to 100 % over ~10 seconds — eliminates the initial FPS spike.
🎮 GUI & HUD Optimizer Dirty-flag hotbar caching (including CustomModelData); HUD throttling with immediate response to actual stat changes. Caches auto-clear on resource-pack reload to prevent stale item textures.

✦ Performance Profiles

One setting, four presets — changing the profile rewrites all other settings automatically.

Profile Entity Dist. BE Dist. LOD threshold Nameplate Particle (mid/max) BG FPS (unfoc/min/menu)
Quality 128 b Off 128 b Off Off 30/10/120
Balanced (default) 64 b 64 b 96 b 32 b 32/64 b 60/30/120
Performance 48 b 48 b 64 b 24 b 16/32 b 10/3/120
Ultra Performance 32 b 32 b 40 b 16 b 8/16 b 5/2/60

Set "profile": null in the config to use fully custom values.


✦ Compatibility

FPSFlow detects installed mods at startup and automatically disables overlapping features.

Mod Status
🟢 Sodium Fully compatible — FPSFlow adds entity/GUI optimizations on top
🟢 Lithium No overlap — both run independently
🟢 FerriteCore No overlap — both run independently
🟢 ModernFix No overlap — both run independently
🟢 ModMenu Optional — enables in-game config screen
EntityCulling (tr7zw) FPSFlow's built-in culling disables automatically — recommended companion for superior occlusion accuracy
ImmediatelyFast FPSFlow's HUD caching defers automatically

Recommended stack: Sodium + Lithium + FerriteCore + ImmediatelyFast + EntityCulling + ModMenu + FPSFlow


✦ Installation

  1. Install Fabric Loader for Minecraft 1.21.11
  2. Download and install Fabric API
  3. Drop the FPSFlow .jar into your mods/ folder
  4. (Optional) Install ModMenu for the in-game settings screen
  5. Launch — the config is written automatically on first run

✦ FAQ

Does FPSFlow conflict with Sodium, Lithium, or FerriteCore? No. FPSFlow is designed to complement these mods — install all of them together.

Can entities "pop in" with occlusion culling? Rarely. The cache refreshes every 10 ticks (configurable). FPSFlow samples the entity's eye position for the raycast — naturally above the geometric centre, which avoids false-positives for small entities like floating heads and armor stands.

Does this work on servers? FPSFlow is purely client-side — works with any server, no server installation required. Servers that send a custom resource pack are fully supported: FPSFlow detects the pack reload and pauses render throttles for ~3 seconds so item-frame maps and hotbar items always show the correct textures after the pack loads.


✦ Partner

NexoMaker — Use code MCAFFE13 for 15% discount

🎨 Create Custom Minecraft Content with NexoMaker

Create custom items, mobs, blocks, recipes, and more — without coding.
Compatible with Nexo, ItemsAdder, and other modern custom-content systems.

💜 Use code MCAFFE13 to get 15% off! 👉 Get started with NexoMaker

⚠️ ItemsAdder or Nexo required for exported content.


✦ Source & License

GitHub — McAffe13/FPSFlow · Licensed under the Mozilla Public License 2.0

Ченджлог

1.8.3Релиз1.21.11 · 29 июля 2026 г.

[1.8.3]

Fixed

  • ModMenu settings screen now shows the full FPSFlow configuration again in modern builds — The modern compatibility screen now exposes the same settings layout as the 1.21.11 build instead of opening an empty or placeholder page.

Changed

  • Version bumped to 1.8.4 — Gradle property mod_version updated from 1.8.3 to 1.8.4.

[1.8.3]

Fixed

  • Particle optimization is no longer enabled by default in the Balanced profile — The default profile now keeps particle limits off unless you enable them manually, so visible effects like fishing particles are not filtered out on a fresh install.

Changed

  • Version bumped to 1.8.3 — Gradle property mod_version updated from 1.8.2 to 1.8.3.
1.8.3Релиз26.1.1, 26.1.2, 26.2 · 29 июля 2026 г.

[1.8.3]

Fixed

  • ModMenu settings screen now shows the full FPSFlow configuration again in modern builds — The modern compatibility screen now exposes the same settings layout as the 1.21.11 build instead of opening an empty or placeholder page.

Changed

  • Version bumped to 1.8.4 — Gradle property mod_version updated from 1.8.3 to 1.8.4.

[1.8.3]

Fixed

  • Particle optimization is no longer enabled by default in the Balanced profile — The default profile now keeps particle limits off unless you enable them manually, so visible effects like fishing particles are not filtered out on a fresh install.

Changed

  • Version bumped to 1.8.3 — Gradle property mod_version updated from 1.8.2 to 1.8.3.
1.8.2Релиз1.21.11 · 26 июля 2026 г.

[1.8.2]

Changed

  • Single modern build now supports both Minecraft 26.1.2 and 26.2 — The modern build target now uses a flexible dependency range (>=26.1 for Minecraft, >=0.155.1 for Fabric API) in fabric.mod.json. A single gradle buildModern produces one JAR that works on both Minecraft 26.1.2 and 26.2 without separate artifacts.
  • Build system improvements — Added minecraft_dep and fabric_dep properties to build.gradle.kts, keeping the compile-time dependency pinned to a specific version while declaring a wider runtime compatibility range in the mod metadata.

Fixed

  • Mod rejected on Minecraft 26.1.2 — The previous hard dependency on Minecraft >=26.2 prevented the mod from loading on 26.1.2. The runtime dependency is now >=26.1, accepting all 26.x releases.
1.8.2Релиз26.1.1, 26.1.2, 26.2 · 26 июля 2026 г.

[1.8.2]

Changed

  • Single modern build now supports both Minecraft 26.1.2 and 26.2 — The modern build target now uses a flexible dependency range (>=26.1 for Minecraft, >=0.155.1 for Fabric API) in fabric.mod.json. A single gradle buildModern produces one JAR that works on both Minecraft 26.1.2 and 26.2 without separate artifacts.
  • Build system improvements — Added minecraft_dep and fabric_dep properties to build.gradle.kts, keeping the compile-time dependency pinned to a specific version while declaring a wider runtime compatibility range in the mod metadata.

Fixed

  • Mod rejected on Minecraft 26.1.2 — The previous hard dependency on Minecraft >=26.2 prevented the mod from loading on 26.1.2. The runtime dependency is now >=26.1, accepting all 26.x releases.
1.8.1Релиз1.21.11 · 24 июля 2026 г.

[1.8.1]

Added

  • Lithium-inspired performance optimizations — FPSFlow 1.8.1 integrates several key optimization techniques adapted from CaffeineMC's excellent Lithium mod, reimplemented from scratch to respect Lithium's license and ensure full compatibility with the FPSFlow codebase:
    • Compact Sine Table (CompactSineTable.java) — A memory-efficient sine LUT that reduces table size from 256 KB to 64 KB using trigonometric identities (sin(-x) = -sin(x), sin(x) = sin(π/2 - x)). Reduces CPU cache pressure during rotation-heavy rendering while maintaining bit-for-bit compatibility with Minecraft's MathHelper.
    • Direction Constants Caching (DirectionValuesMixin.java, FastDirection.java) — Prevents repeated defensive array copies from Direction.values() in hot code paths by providing cached references. Every call to Enum.values() in Java creates a new array allocation; this optimization eliminates that overhead in frequently-called redstone, block update, and entity collision code.
    • Fast BlockPos Utilities (FastBlockPos.java) — Thread-local mutable BlockPos for iteration contexts plus efficient long-packing for hash-based collections, reducing GC pressure in chunk scanning and neighbor-iteration hot loops.
    • Collection Helper (FastCollectionHelper.java) — Pre-sized HashMap/HashSet factories with optimal initial capacities, identity-based sets for entity classification, and utility methods that avoid the common allocation pitfalls found in vanilla's collection usage.
  • Full Lithium attribution — All adapted code paths include Javadoc @see references and Inspired by comments linking to the upstream Lithium repository.

Changed

  • Version bumped to 1.8.1 — Gradle property mod_version updated from 1.8 to 1.8.1.
  • OptimizationManager module list extended — New lightweight utility modules are registered on startup (no tick overhead, no Minecraft class dependencies).

Fixed

  • None.
1.8.1Релиз26.1.1, 26.1.2, 26.2 · 24 июля 2026 г.

[1.8.1]

Added

  • Lithium-inspired performance optimizations — FPSFlow 1.8.1 integrates several key optimization techniques adapted from CaffeineMC's excellent Lithium mod, reimplemented from scratch to respect Lithium's license and ensure full compatibility with the FPSFlow codebase:
    • Compact Sine Table (CompactSineTable.java) — A memory-efficient sine LUT that reduces table size from 256 KB to 64 KB using trigonometric identities (sin(-x) = -sin(x), sin(x) = sin(π/2 - x)). Reduces CPU cache pressure during rotation-heavy rendering while maintaining bit-for-bit compatibility with Minecraft's MathHelper.
    • Direction Constants Caching (DirectionValuesMixin.java, FastDirection.java) — Prevents repeated defensive array copies from Direction.values() in hot code paths by providing cached references. Every call to Enum.values() in Java creates a new array allocation; this optimization eliminates that overhead in frequently-called redstone, block update, and entity collision code.
    • Fast BlockPos Utilities (FastBlockPos.java) — Thread-local mutable BlockPos for iteration contexts plus efficient long-packing for hash-based collections, reducing GC pressure in chunk scanning and neighbor-iteration hot loops.
    • Collection Helper (FastCollectionHelper.java) — Pre-sized HashMap/HashSet factories with optimal initial capacities, identity-based sets for entity classification, and utility methods that avoid the common allocation pitfalls found in vanilla's collection usage.
  • Full Lithium attribution — All adapted code paths include Javadoc @see references and Inspired by comments linking to the upstream Lithium repository.

Changed

  • Version bumped to 1.8.1 — Gradle property mod_version updated from 1.8 to 1.8.1.
  • OptimizationManager module list extended — New lightweight utility modules are registered on startup (no tick overhead, no Minecraft class dependencies).

Fixed

  • None.
1.8Релиз26.1.1, 26.1.2, 26.2 · 23 июля 2026 г.

[1.8.0]

Changed

  • Configurable Java target — The Java version is no longer hardcoded in build.gradle.kts. It is now read from the java_version property in gradle.properties (default: 21). Set java_version=25 to build with Java 25. The Mixin compatibility level (JAVA_21 / JAVA_25) and the remapJar classifier (mc1.21.11-java21 / mc1.21.11-java25) are derived automatically from this value — nothing is hardcoded.
  • Removed broken Java 21 / Java 25 multi-target build — The previous targetJavaVersion switch that attempted to produce separate artifacts for different Minecraft generations never functioned correctly. The build now uses a single, configurable Java version.
  • Removed Java 25 properties from gradle.properties — The minecraft_version_java25, yarn_mappings_java25, loader_version_java25, fabric_version_java25, and modmenu_version_java25 properties have been removed. All builds now use the single set of Fabric properties.
  • Simplified build.gradle.kts — Dead code removed, all comments translated to English, ModMenu removed from compile-time dependencies. The integration class now uses a matching method signature that ModMenu calls via reflection, eliminating the compile-time dependency that caused build failures when ModMenu artifacts were unavailable.
  • Fixed TerraformersMC Maven repository URL — Changed from https://terraformersmc.com to https://maven.terraformersmc.com for correct dependency resolution.
  • Improved fabric.mod.json — Description updated to match the Modrinth page; fabricloader and fabric-api dependency minimums tightened to >=0.19.3 and >=0.141.4 respectively.
  • Updated how_to_build.md — Rewritten for the single configurable Java build path; references to the removed buildJava21 / buildJava25 tasks eliminated.
  • Updated settings.gradle.kts — Removed version lock for fabric-loom and simplified plugin repository configuration.
  • Fabric API version corrected — Changed from 0.19.3+26.2 (invalid) to 0.141.4+1.21.11 (correct for MC 1.21.11).
  • Build verified with Java 25 — Successfully compiled and remapped fpsflow-1.8.0-mc1.21.11-java25.jar.
  • Version migration guide — Added VERSION_MIGRATION.md documenting short-term (Yarn) and long-term (Mojang mappings) strategies.

Fixed

  • ModMenu integration was brokenFPSFlowModMenuIntegration.createConfigScreen() returned null, causing a NullPointerException when a player clicked the Config button in ModMenu. The class now properly implements ModMenuFactory and returns a FPSFlowConfigScreen instance.
  • Duplicate translation keys in en_us.json and de_de.json — The entity_lod and item_frame key blocks were duplicated, with the first occurrence silently overwritten by the second. All duplicate blocks have been merged into single, complete entries.
  • Missing translation keys — Added entity_culling.painting_backface_culling, entity_culling.painting_backface_culling.tooltip, and nameplate_culling.enabled.tooltip to both language files. These keys were referenced by the config screen but had no translations, causing fallback to the raw key string.
  • Dead variable in settings.gradle.kts — The mcVersion variable was read from Gradle properties but never used in the fabric-loom resolution strategy. Removed.

Removed

  • i18n_pending_keys.txt and README_UI_KEYS.txt — These development artifacts tracked missing translation keys. All keys are now present in both language files, so these files are no longer needed.
  • gradlew and gradle/wrapper/ — The Gradle wrapper is unnecessary when Gradle is installed system-wide. Users can build directly with gradle build.
  • Yarn OFFICIAL mapping mode — Temporarily removed; Loom 1.17.3 requires explicit Yarn mappings.
1.8Релиз1.21.11 · 23 июля 2026 г.

[1.8.0]

Changed

  • Configurable Java target — The Java version is no longer hardcoded in build.gradle.kts. It is now read from the java_version property in gradle.properties (default: 21). Set java_version=25 to build with Java 25. The Mixin compatibility level (JAVA_21 / JAVA_25) and the remapJar classifier (mc1.21.11-java21 / mc1.21.11-java25) are derived automatically from this value — nothing is hardcoded.
  • Removed broken Java 21 / Java 25 multi-target build — The previous targetJavaVersion switch that attempted to produce separate artifacts for different Minecraft generations never functioned correctly. The build now uses a single, configurable Java version.
  • Removed Java 25 properties from gradle.properties — The minecraft_version_java25, yarn_mappings_java25, loader_version_java25, fabric_version_java25, and modmenu_version_java25 properties have been removed. All builds now use the single set of Fabric properties.
  • Simplified build.gradle.kts — Dead code removed, all comments translated to English, ModMenu removed from compile-time dependencies. The integration class now uses a matching method signature that ModMenu calls via reflection, eliminating the compile-time dependency that caused build failures when ModMenu artifacts were unavailable.
  • Fixed TerraformersMC Maven repository URL — Changed from https://terraformersmc.com to https://maven.terraformersmc.com for correct dependency resolution.
  • Improved fabric.mod.json — Description updated to match the Modrinth page; fabricloader and fabric-api dependency minimums tightened to >=0.19.3 and >=0.141.4 respectively.
  • Updated how_to_build.md — Rewritten for the single configurable Java build path; references to the removed buildJava21 / buildJava25 tasks eliminated.
  • Updated settings.gradle.kts — Removed version lock for fabric-loom and simplified plugin repository configuration.
  • Fabric API version corrected — Changed from 0.19.3+26.2 (invalid) to 0.141.4+1.21.11 (correct for MC 1.21.11).
  • Build verified with Java 25 — Successfully compiled and remapped fpsflow-1.8.0-mc1.21.11-java25.jar.
  • Version migration guide — Added VERSION_MIGRATION.md documenting short-term (Yarn) and long-term (Mojang mappings) strategies.

Fixed

  • ModMenu integration was brokenFPSFlowModMenuIntegration.createConfigScreen() returned null, causing a NullPointerException when a player clicked the Config button in ModMenu. The class now properly implements ModMenuFactory and returns a FPSFlowConfigScreen instance.
  • Duplicate translation keys in en_us.json and de_de.json — The entity_lod and item_frame key blocks were duplicated, with the first occurrence silently overwritten by the second. All duplicate blocks have been merged into single, complete entries.
  • Missing translation keys — Added entity_culling.painting_backface_culling, entity_culling.painting_backface_culling.tooltip, and nameplate_culling.enabled.tooltip to both language files. These keys were referenced by the config screen but had no translations, causing fallback to the raw key string.
  • Dead variable in settings.gradle.kts — The mcVersion variable was read from Gradle properties but never used in the fabric-loom resolution strategy. Removed.

Removed

  • i18n_pending_keys.txt and README_UI_KEYS.txt — These development artifacts tracked missing translation keys. All keys are now present in both language files, so these files are no longer needed.
  • gradlew and gradle/wrapper/ — The Gradle wrapper is unnecessary when Gradle is installed system-wide. Users can build directly with gradle build.
  • Yarn OFFICIAL mapping mode — Temporarily removed; Loom 1.17.3 requires explicit Yarn mappings.

Комментарии

Загружаем…