Skip to content

Installation and configuration

BonsUnleashed edited this page Oct 7, 2026 · 15 revisions

Installation and configuration

Minecraft 1.20.1 / Forge: this page documents that build and its measurements. For the separate 170-control Minecraft 1.21.1 port, see Minecraft 1.21.1 NeoForge.

Requirements

Minecraft Java Edition 1.20.1 only (mods.toml pins [1.20.1]).
Loader Forge 47.3.22 or newer within the 47.x line. 47.3.22 is the declared floor (mods.toml); tested with 47.4.16. NeoForge and Fabric are not supported.
Java Whatever your Forge 1.20.1 install uses (Java 17 or 21). The helper classes are compiled with --release 17.
Dependencies None are mandatory. Every target mod is declared optional with an open version range, so the mod loads in any 1.20.1 Forge pack.
Sides Install the same JAR on both client and server. Client-only entries (rendering, shaders, ambience) never load their classes on a dedicated server; server-side entries do nothing on a client that is not hosting a world.

Installing

  1. Download bons_and_furious-<version>.jar (1.0.15 and earlier: bons_pure_optimizations-<version>.jar) from the GitHub releases, the CurseForge files tab or Modrinth. The published 1.0.21 JAR, bons_and_furious-1.0.21.jar, is 1,193,773 bytes with SHA-256 335632b1ca59829d95cf3a0c436a955968f1b71df0d6c62e72307bdf9cec1531; the 1.0.19 JAR, bons_and_furious-1.0.19.jar, is 665,686 bytes with SHA-256 32b1e64538ffd0b29ce18e5f3cb07f9a538e3506e6319e36be4f65f75666c1f9; the 1.0.15 JAR, bons_pure_optimizations-1.0.15.jar, is 598,458 bytes with SHA-256 1e8046b57a304b58dab66a3b1e634f5b73e767078896ba7f38ee9ba1c0807b38.
  2. Put it in mods/ on the client and on the server.
  3. Start the game once. The mod writes config/bons_and_furious.properties (1.0.15 and earlier: config/bons_pure_optimizations.properties) from its bundled defaults (every switch true) and logs how many controls are enabled.
  4. Optionally edit that file (see below) and restart.

Upgrading from earlier Bons mods

Bons and Furious absorbed two former companion mods. Remove their JARs; the same work is included and the two would otherwise patch the same classes twice.

Retired mod Folded in at What it carried
Bons Worldgen Compatibility 1.0.0 1.0.11 The six generation-context fixes of 1.0.11; see Generation context fixes.
Bons Valkyrien Fixes 1.3.0 (displayed as Bons to Be Afloat) 1.0.15 All 15 valkyrien_* controls on Valkyrien Skies and the Trackwork model repair.

Technical names changed in 1.0.16. Up to 1.0.15 the mod id (bons_pure_optimizations), the JAR and config file names, the JVM property names and the Bons Pure Optimizations log prefix kept the mod's former name; from 1.0.16 on they use bons_and_furious / Bons and Furious (full list on Version history). Updating keeps your switches: the first start of 1.0.16 or newer writes config/bons_and_furious.properties from its defaults with every switch your old config/bons_pure_optimizations.properties set to false still false, and keeps the old file as bons_pure_optimizations.properties.migrated. The old JVM flag spellings are still accepted. Because the file name changed, the new JAR does not replace the old one: remove bons_pure_optimizations-<version>.jar from mods/ on the client and the server. With both JARs present Forge refuses to start, because the two mod ids would load the same packages twice. A mod that declares a dependency on this one must name bons_and_furious from 1.0.16 on.

The configuration file

config/bons_and_furious.properties is a plain Java properties file. Each key is preceded by a comment block that names the target mod and version, the side, the release it first shipped in, what it changes and what was measured. The shipped default is reproduced in the repository as resources/bons_and_furious.default.properties.

# ----------------------------------------------------------------------------------------------
# Architectury event dispatch without MethodHandle re-resolution
# Target: Architectury API 9.2.14 | side: BOTH | since 1.0.2
# ... description and measurement ...
architectury_event_dispatch=true

Rules the loader applies (implemented in PureConfig.java):

  • true applies the patch; false leaves that target's code exactly as shipped. Every key ships true except vanilla_background_level_dat (see its section). Values are case-insensitive; anything else logs a warning and counts as true.
  • Changes need a restart. Every patch is applied while its target class is being loaded, so a running game cannot pick up an edit.
  • Missing keys are appended with their default and comment block on the next start, so the file stays complete after an update. Unknown keys are ignored with one warning line, so a key from a newer or older build does no harm.
  • The file is read before any game class is transformed. A Mixin config plugin loads it, which Forge initialises before the game's main class is loaded.
  • Fail-open. If the file cannot be read or written, every patch stays enabled and the reason is logged; the mod never refuses to load. A UTF-8 byte-order mark at the start of the file is tolerated.

At startup the log reports the outcome (1.0.15 and earlier start the line with Bons Pure Optimizations), for example:

Bons and Furious 1.0.34: 253 of 254 optimizations enabled from C:\...\config\bons_and_furious.properties; disabled: vanilla_background_level_dat

JVM overrides

Any switch can also be forced off from the JVM command line, which wins over the file:

-Dbons_and_furious.disabled.<key>=true

1.0.15 and earlier use -Dbons_pure.disabled.<key>=true; newer builds still accept that spelling.

Three older property names from before the switches existed are still honoured, and are set automatically when their key is disabled in the file:

Key Legacy property
frame_pacing -Dbons_and_furious.framePacing=false
terrain_density_memo -Dac.terrain.enabled=false
ambientsounds_terrain_scan_bound -Dbons_and_furious.ambientHeight=false

In 1.0.15 and earlier the first and third are spelled -Dbons.pure.framePacing and -Dbons.pure.ambientHeight. Newer builds still accept those spellings and log once that the flag uses the mod's former name.

Which controls run where

Client-only controls (their target classes exist only on the client): ambientsounds_biome_match_cache, ambientsounds_terrain_scan_bound, frame_pacing, presencefootsteps_duplicate_tracking, ryoamiclights_chunk_iteration, ryoamiclights_block_entity_lock_skip, distanthorizons_render_param_inverse_reuse, vanilla_model_bone_lookup, etf_sprite_texture_id_memo, emf_block_entity_type_string, every oculus_* control, every embeddium_* control, immediatelyfast_offset_layer_prefixes and valkyrien_render_interpolation. Everything else runs on both sides, and the generation-context fixes and data-pack function fixes matter on whichever side hosts the world (the dedicated server, or the client in single-player). The keys are present in both sides' config files; a client-only key on a server is simply never consulted.

Entries that deliberately change behaviour

Most controls are pure equivalences: same answers, same random draws, same update cadence. A few change when or where something happens, and their pages say exactly how. Switch them off individually if you want stock behaviour:

  • frame_pacing — moves the FPS-limiter wait before the display update (timing only). Minecraft
  • occult_bed_scan_guard — draws the 1-in-1000 roll before reading blocks and never loads chunks for the scan. Occult
  • fowlplay_air_targets_loaded_only — birds only pick flight targets in chunks that are already loaded. Fowl Play
  • scorched_sandcrab_burrow_gate — buried sandcrabs are processed only within 192 blocks of a player. Scorched
  • The six generation-context fixes keep generation-time work inside the generation region; two of them draw their random numbers from the region's random instead of the live world's. Generation context fixes
  • The four Valkyrien fixes (valkyrien_terrain_snapshot_order, valkyrien_backoff_nan, valkyrien_weather_occlusion, valkyrien_sculk_vibrations) correct defects, so by definition they change an outcome. Valkyrien Skies

Dedicated servers and modpacks

  • Ship the same config file on both sides if you disable anything; there is no sync, and a control disabled on only one side is simply asymmetric (harmless, but confusing when comparing profiles).
  • The mod needs no data-pack or resource-pack installation. Its two built-in data packs register themselves as required packs at the top of the stack when their conditions hold, and its resource repair is applied in memory.
  • Do not also ship the retired Bons Valkyrien Fixes / Bons to Be Afloat or Bons Worldgen Compatibility JARs.

Bons and Furious

Minecraft 1.20.1 / Forge 1.0.34

Compatibility

Controls by mod

Links

Clone this wiki locally