### π Major Release
This is the first public release of InputBooster 3.0.0, built for **Minecraft 1.21.11** with **Fabric Loader 0.19.2**.
---
### π Fixed
#### Critical Crash Fixes
- **Startup mixin crash β `CallbackInfoReturnable is required`**
In MC 1.21.11, `MinecraftClient.doAttack()` was changed from `void` to `boolean`. Mixin's `@Inject` on a non-void method requires `CallbackInfoReturnable<Boolean>` instead of plain `CallbackInfo`. The `onDoAttack` handler in `GameTickMixin` was using `CallbackInfo`, causing a fatal mixin apply error that crashed the game on launch. Fixed by switching to `CallbackInfoReturnable<Boolean>` and replacing `ci.cancel()` with `cir.setReturnValue(false)`.
- **Settings screen crash β `Can only blur once per frame`**
MC 1.21.11 already triggers a background blur before delegating to a screen's `render()` method. The old code called `renderBackground()` manually at the top of `InputBoosterScreen.render()`, firing the blur shader twice in the same frame and crashing. Removed the manual call; `super.render()` handles it correctly.
- **Matrix stack compile errors (`push` / `pop` / `scale` not found)**
`ctx.getMatrices()` in MC 1.21.11 returns JOML's raw `Matrix3x2fStack`, which has no `push()`, `pop()`, or three-argument `scale()`. Attempts to cast it to `net.minecraft.client.util.math.MatrixStack` also failed at runtime. Removed matrix stack scaling entirely; overlay size and line spacing are now computed directly from the scale factor in pixel coordinates.
#### Gameplay Fixes
- **Double block break on a single click**
One left-click was destroying two blocks instead of one. Root cause: `InputDrainer.apply()` called `attackBlock()` for block targets while vanilla's `handleBlockBreaking()` loop was already calling `attackBlock()` every tick the button was held β two calls per tick. Fixed by removing the `attackBlock()` call from the drainer for block targets entirely. Block breaking is now driven exclusively by vanilla's continuous held-key loop. Entity hits remain one-shot events and are still fired from the drainer with `attackHandledThisTick = true` to suppress vanilla's duplicate.
- **CPS always showing 0**
After the double-block-break fix moved `recordClick()` into the entity-only branch, block clicks were no longer counted toward CPS. Moved `recordClick()` up to `drainAll()` so it fires for every accepted `ATTACK_PRESSED` event regardless of target type.
- **P key can't re-enable mod / O key stops working when mod is off**
`onClientTick` had `if (!active || !initialized.get()) return` at the very top, which meant once P toggled the mod off the entire tick method exited before `handleKeybinds()` was ever reached. Both P and O became dead keys until the game was restarted. Fixed by moving the `handleKeybinds()` call before the `active` guard so both keys always work.
#### HUD / Overlay Fixes
- **Overlay visible during F3 screen**
The HUD panel rendered on top of F3, making both unreadable. The overlay now checks `mc.getDebugHud().shouldShowDebugHud()` and returns early, hiding automatically when F3 is open and reappearing when it closes.
---
### β¨ Added
#### HUD Overlay
- **Always-on HUD panel** β renders on the game screen at all times, not only when F3 is open. Automatically hides when F3 is active to avoid clutter.
- **Configurable corner position** β cycle through Top-Left, Top-Right, Bottom-Left, Bottom-Right from the Advanced settings tab.
- **Configurable scale** β slider from 0.5Γ to 3.0Γ in the Advanced settings tab.
- **Semi-transparent background box** β drawn behind all overlay lines for readability against any terrain.
#### Settings Screen (O key)
- Full tabbed GUI with five tabs: Poll Rate, Features, Advanced, Stats, Profiles.
- **Poll Rate tab** β AUTO/MANUAL mode toggle, poll rate slider (60β1000 Hz), six quick-preset buttons (100 / 200 / 350 / 500 / 750 / 1000 Hz), Burst Mode toggle, Combo Keys toggle.
- **Features tab** β toggles for Sprint Fix, Auto-Sprint, W-Tap Assist, Anti-Idle, Auto-Strafe, CPS Limiter, and a Max CPS slider.
- **Advanced tab** β HUD Overlay on/off, Overlay Position cycler, Overlay Scale slider, Action Bar Messages toggle, Debug Mode toggle, FPS Check Interval slider.
- **Stats tab** β session uptime, recovered inputs, estimated missed inputs, latency info, poll thread status, 60-second CPS sparkline graph.
- **Profiles tab** β save and load up to 5 named presets (PvP, Mining, Idle, Hybrid, Custom).
#### Core Features
- **Adaptive Burst Mode** β automatically spikes poll rate to 1000 Hz for 3 seconds when FPS drops more than 20% in one second, then returns to the configured rate.
- **Session Stats tracker** β records session uptime, total recovered inputs, estimated missed inputs without the mod, and a rolling CPS history.
- **Config Profiles** β save and load named configuration snapshots from the in-game screen.
- **Latency Profiler** β tracks per-drain latency with rolling average and peak value, displayed in the HUD overlay.
- **CPS Limiter** β configurable cap (1β20 CPS, default 20) with real-time display in the overlay.
#### Config File
- New keys: `overlay_position` (integer 0β3, default `0` = Top-Left) and `overlay_scale` (float 0.5β3.0, default `1.0`).
---
### π§ Changed
- **HUD is now always-on** instead of F3-only. Toggle it via the Advanced tab in settings (O key).
- **"F3 Overlay Info" setting renamed to "HUD Overlay"** to accurately describe its function.
- Poll rate range expanded from `[100, 500]` Hz to `[60, 1000]` Hz.
- `onDoAttack` mixin now uses `CallbackInfoReturnable<Boolean>` and `setReturnValue(false)` instead of `CallbackInfo` and `cancel()`.
- `handleKeybinds()` now runs before the `active` guard in the tick loop.
---
### ποΈ Removed
- **"Double-hit fix: ON"** line removed from the HUD overlay β the fix is always active and the line was noise.
- Manual `renderBackground()` call removed from `InputBoosterScreen.render()`.
- Matrix stack push/pop/scale calls removed from `DebugOverlayManager` (incompatible with MC 1.21.11 API).
---
## [2.0.2] - 2026-03-30
### π Fixed
- **"Not Responding" on MC 1.21.11+** β polling thread now checks for interruption and logs errors instead of silently failing.
- **CPS never recorded** β `CpsLimiter.recordClick()` was never called from `InputDrainer`. Fixed.
- **Silent polling errors** β changed error handling from silent to WARN-level logging.
- **Null dereference** β added null checks in `InputDrainer` and `GameTickMixin`.
- **WTapAssist silent failure** β added try-catch around `onWRelease()` so feature errors don't block the drain loop.
- **Sleep efficiency** β polling thread sleep changed to millisecond precision for better CPU and battery usage.
### β¨ Added
- Colorful F3 display with status-based color coding (red / yellow / green / gray).
- Visual status indicators (β / β) for enabled/disabled features in F3.
---
## [2.0.1] - 2026-03-29
### π Fixed
- **Double input drain** β `InputDrainer.drainAll()` was called twice per tick. Removed redundant drain.
- **AtomicLong race condition** β `totalHits` and `recoveredInputs` were `volatile long` incremented with `++` from multiple threads. Replaced with `AtomicLong`.
- **WTapAssist dead code** β `FORWARD_RELEASED` events were queued but never handled in `InputDrainer`. Wired up.
- **Unsafe MC reads from polling thread** β introduced `gameReady` / `gamePaused` volatile flags; polling thread reads flags instead of MC objects directly.
- **O(n) queue size** β `ConcurrentLinkedQueue.size()` replaced with `AtomicInteger` for O(1) tracking.
- **Poll rate bounds mismatch** β internal clamp unified with documented range.
---
## [2.0.0] - 2026-03-27
### π First Public Release β Complete Rewrite
Internal v1.0 was never released due to memory leaks, Sodium/Iris crashes, config corruption, and thread-safety issues. v2.0 is a ground-up rewrite.
### β¨ Added
- Dynamic FPS-aware poll rate (100β500 Hz auto-scaling).
- F3 debug screen integration (poll rate, FPS, recovered inputs, CPS, feature states).
- Real-time CPS tracker with sliding-window algorithm.
- Auto-Strafe correction for diagonal movement at low FPS.
- Anti-Idle protection against AFK kicks during lag spikes.
- Lock-free concurrent input queue.
- Mixin-based event interception compatible with Sodium, Iris, Lithium.
- Graceful thread lifecycle (clean startup and shutdown hooks).
- Properties-file config with validation, bounds checking, and auto-creation.
### ποΈ Removed (vs internal v1.0)
- HUD overlay system β replaced with F3 integration.
- Experimental / unstable features.
- MC 1.19β1.20 legacy compatibility modes.
- Built-in macro system.
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" }