# Changelog
All notable changes to InputBooster will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
---
## [3.0.0] - 2026-05-23
### 🎉 Major Release — Minecraft 1.21.11 Full Port
This release is a complete port and overhaul targeting **Minecraft 1.21.11** with **Fabric Loader 0.19.2** and **Fabric API 0.141.3**. All known bugs from 2.x have been resolved and several new features have been added.
---
### 🔧 Build System
- **Upgraded fabric-loom** from legacy version to `1.14.10` — the latest stable release supporting MC 1.21.11
- **Fixed Gradle plugin resolution** — added `resolutionStrategy` in `settings.gradle` to correctly resolve `fabric-loom` from Fabric Maven (`https://maven.fabricmc.net/`)
- **Gradle wrapper** pinned to `9.5.1` for compatibility with loom 1.14.10
- **Java toolchain** set to Java 21 (required for MC 1.21.11)
---
### 🐛 Fixed
#### Compilation Errors (MC 1.21.11 API Changes)
- **`KeyBinding` category API breaking change:** `KeyBinding` constructor no longer accepts a raw `String` for the category parameter. Updated both keybindings (`key.inputbooster.options`, `key.inputbooster.toggle`) from `"key.categories.misc"` → `KeyBinding.Category.MISC` to match the new record-based category system introduced in 1.21.9+
- **`DrawContext.drawBorder()` removed:** Method no longer exists in 1.21.11. Replaced with four explicit `drawHorizontalLine` / `drawVerticalLine` calls to draw the CPS graph border in `InputBoosterScreen`
#### Runtime Bugs
- **Black overlay covering the screen:** `DebugOverlayManager` was calling `ctx.fill()` to draw a semi-transparent black background (`0x8B000000`) behind each HUD text line. In 1.21.11, `DrawContext.fill()` renders without proper alpha blending, producing a solid black stripe across the entire screen. Removed the background fill and enabled text shadow (`drawText(..., true)`) for readability instead
- **"Burst Mode ended" message looping on screen:** `BurstModeManager` sent the action bar message inside the tick loop without a sent-flag guard, causing it to fire every tick rather than once. Fixed with an `endMsgSent` boolean flag that prevents the message from repeating
- **Burst Mode triggering immediately on game load:** `lastFps` was initialized to `-1`, causing a massive artificial FPS drop on the very first tick which immediately triggered burst mode. Fixed by initializing `lastFps` to `0` and only comparing when FPS is stable (`> 10`)
- **`lastFps` updated with invalid zero FPS values:** FPS reads of `0` during early load were being stored as `lastFps`, corrupting future drop calculations. Fixed by only updating `lastFps` when `fps > 0`
---
### ✨ Added
- **`BurstModeManager` — `endMsgSent` flag:** Ensures the "Burst Mode ended" action bar message is shown exactly once per burst cycle
- **`ProfileManager` system:** Saves and loads named poll rate profiles, allowing players to switch between preset configurations
- **`SessionStats` tracker:** Tracks per-session statistics including total hits, recovered inputs, average CPS, and session duration
- **`LatencyProfiler`:** Measures and reports input-to-frame latency in the HUD overlay and F3 debug screen
- **In-game config screen (`InputBoosterScreen`):** Full GUI screen accessible via keybind (default `O`) for toggling all features and adjusting poll rate without restarting
- **Combo key presets (`Ctrl+1` through `Ctrl+5`):** Instantly switches poll rate to 100 / 200 / 350 / 500 / 1000 Hz in-game
- **Burst Mode (`BurstModeManager`):** Automatically spikes poll rate to 1000 Hz for 3 seconds when FPS drops more than 20% in a single second, ensuring zero inputs are lost during lag spikes
- **CPS graph in settings screen:** Visual bar chart of recent CPS history with color-coded bars (green / yellow / red based on proximity to the CPS cap)
- **Action bar notifications:** Optional in-game messages for burst mode activation/deactivation and poll rate changes via combo keys
---
### 🔄 Changed
- **HUD overlay background** replaced from opaque `ctx.fill()` box → text shadow for clean rendering on all GPU/driver combinations
- **Poll rate auto mode** now uses a 5-tier FPS threshold system (≤20 FPS → 500 Hz, ≤30 → 400 Hz, ≤60 → 200 Hz, ≤120 → 150 Hz, 120+ → 100 Hz)
- **Config file** expanded with new keys: `burstModeEnabled`, `showActionBar`, `comboKeysEnabled`, `maxCps`, `debugMode`
- **Mod version** bumped to `3.0.0` across all metadata files
---
### 🗑️ Removed
- **`ctx.fill()` background behind HUD lines** — caused black overlay bug on 1.21.11
- **String-based `KeyBinding` category** — replaced with typed `KeyBinding.Category` record
- **`DrawContext.drawBorder()` call** — method removed from MC 1.21.11 API
---
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }