Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Tags
Creators
Details
I Meant To Do That
A quiet mistake-correction layer for vanilla Minecraft.
I Meant To Do That watches a small, bounded set of recent building actions and gives the player a short chance to correct likely slips. It can undo a just-placed block, rotate a recent directional block, warn about a stair or slab outlier, and restore an accidentally stripped or scraped block. Suggestions are preferred over automatic changes, and every world-changing request is checked by the server.
This is not a building bot or a cheat client. It does not select materials, extend structures, place blocks at a distance, or make open-ended gameplay decisions.
Compatibility
| Component | Version |
|---|---|
| Minecraft | 26.2 |
| Java | 25 or newer |
| Fabric Loader | 0.19.5 or newer |
| Fabric API | 0.159.0+26.2 or newer compatible 26.2 build |
| Mod Menu | 20.0.1 tested; optional, recommended for the configuration screen |
The build is intentionally pinned to Minecraft 26.2. A jar built for another Minecraft line is not supported.
Features
Temporary placement undo
After an eligible placement, a fading HUD prompt remains available for 40 server ticks by default (about two seconds at 20 TPS). Press Z to restore the prior block state.
- The server records the player, dimension, position, old state, resulting state, relevant block-entity data, consumed item, and expiry.
- Survival returns exactly the one item whose consumption was observed. Creative restores the world without adding an item.
- A full inventory, changed state, changed block-entity data, unloaded chunk, dimension change, death, logout, timeout, unsafe game mode, or excessive distance can reject the undo.
- Another player or world event changing the watched position invalidates the action.
- Beds, double-height placements, falling blocks, piston bases, rails, TNT, and oversized block-entity snapshots are deliberately excluded.
Smart stair suggestions
The stair analyzer checks only a small horizontal neighborhood. It requires at least three matching stairs and a clear 80% orientation majority before treating a new stair as suspicious. Facing, top/bottom half, and vanilla stair shape are considered, together with a short recent-placement history.
The default SUGGEST mode displays an unobtrusive prompt. Look at the stair and press R to apply the suggestion. AUTO_CORRECT is opt-in and is used only when both the client and server enable it and the explainable confidence score reaches the configured threshold, 0.95 by default. Missing or incompatible client preferences always fall back to suggestions and vanilla-safe behavior.
Recent block rotation
Look directly at a compatible block placed during the last 60 server ticks (about three seconds) and press R.
Supported groups are independently configurable:
- stairs;
- logs and other rotated pillars;
- glazed terracotta plus an explicit decorative allow-list: carved pumpkins, ladders, end rods, wall coral fans, non-redstone wall torches, wall signs/hanging signs, wall banners, and wall skulls;
- furnaces and barrels;
- pistons, observers, dispensers, droppers, and redstone wall torches, disabled by default because they can affect gameplay.
Rotation changes only the recorded block at normal interaction range. The server checks ownership, position, dimension, timeout, current state, block-entity data, survival validity, and request rate before changing it.
Conservative building-pattern warnings
The runtime detector can warn when either a different block type or a different exact block state breaks an established recent row or column. It requires four recent matching placements, at least three aligned samples, and a short five-second server-tick window. Stair orientation and slab state are analyzed by their specialized detectors.
Warnings do not replace the block automatically.
Double-slab detection
When a placement changes an existing single slab into a double slab, nearby and recent slabs are used to decide whether the result is likely accidental. The default behavior is a warning with Z undo. Automatic double-slab undo exists as a separate, disabled-by-default setting and runs only when both the client and server opt in.
Axe-interaction undo
The same short undo flow covers:
- stripping a log or wood block;
- scraping one oxidation stage from copper;
- removing wax from copper.
Undo restores the original block state. It intentionally does not refund axe durability, items, or drops.
Smart interaction priority
This feature is off by default. In full mode it can give a valid held-block placement an early chance before an interactive target opens, but only when both the client and server enable compatible policies:
VANILLAleaves interaction order unchanged;WHILE_SNEAKINGrelies on Minecraft's normal secondary-use placement behavior;SELECTED_ITEMSprioritizes configured block-item IDs;CONTEXT_SENSITIVEdoes so for configured items or block-entity targets.
The default selected IDs are minecraft:torch, minecraft:soul_torch, and minecraft:redstone_torch. The effective policy is the conservative intersection of the client's and server's mode and selected-item list. The client mirrors that negotiated policy for prediction while the server remains authoritative. If either side declines, the item or context is not allowed by both sides, or placement is invalid, the callback passes through to vanilla behavior.
Deterministic local learning
The client can count a narrow, understandable habit: place a block, break it shortly afterward, then replace the same block at the same position with different state properties. At the configured repetition threshold, the HUD asks the player to review the proposed rule.
- No neural network or external AI service is used.
- A rule is never accepted merely because its counter reached the threshold.
- Rules can be accepted, enabled or disabled, deleted individually, or reset.
- An accepted, enabled rule can correct only its matching same-block state transition in full mode; the server still validates the recent owned placement and resulting state.
- Rule storage is local to the client in
config/imeanttodothat-learning.json.
See Privacy and Known limitations for the exact scope.
Minimal HUD and bounded history
Prompts fade in and out without using chat. Four positions are available: bottom center, top center, bottom left, and top left.
Server history is bounded per player (64 actions by default), client offers are capped at 32, recent pattern input is capped, and the server's in-memory audit is capped at 256 entries. Expiration cleanup runs periodically; the mod does not scan large areas every tick.
Installation
Client-only mode
- Install Minecraft 26.2.
- Install Fabric Loader 0.19.5 or newer for that instance.
- Put a compatible Fabric API jar in the instance's
modsdirectory. - Put
imeanttodothat-1.0.0.jarin the same directory. - Optionally install Mod Menu 20.0.1 or a compatible 26.2 release.
You may connect to a server that does not have the mod. Client-only mode never attempts to mutate that server's world. It provides best-effort local warnings for suspicious stairs, double slabs, and simple block/state outliers; Z, R, modification undo, interaction priority, and learned corrections require the server component.
Full mode
Install the mod and Fabric API on both the client and the Fabric server. Mod Menu is needed only on clients.
The client detects full mode through Fabric's negotiated networking channel. It sends a bounded, connection-local preference handshake for automatic stair correction, automatic double-slab undo, and smart interaction policy. World changes are performed by the server component after validation, and the server's configuration remains the upper bound. A dedicated server owns its own config/imeanttodothat.json; changing a client's Mod Menu settings advertises that client's consent but does not rewrite or broaden server policy. Stop the dedicated server, edit its configuration, and restart it when changing server behavior.
Singleplayer runs an integrated server and therefore has full-mode behavior.
Client-only and full-mode matrix
| Capability | Client-only, unmodded server | Full mode, mod on client and server |
|---|---|---|
| Load safely and retain vanilla server authority | Yes | Yes |
| Key mappings, local settings, HUD renderer | Yes | Yes |
| Post-placement stair warning | Best-effort visual warning only | Server-linked suggestion and recent-action offer |
| Simple block/state-pattern warning | Best-effort visual warning only | Server history-backed warning |
| Double-slab warning | Best-effort visual warning only | Warning plus eligible undo |
| Placement undo | No; optional “server required” HUD notice | Yes, when server safety checks pass |
| Recent compatible-block rotation | No; optional “server required” HUD notice | Yes, when server safety checks pass |
| Extremely-high-confidence stair auto-correction | No | Yes, only when client consent and server policy both enable it |
| Automatic double-slab undo | No | Yes, only when client consent and server policy both enable it |
| Strip, scrape, and unwax undo | No | Yes |
| Smart interaction priority | No | Yes, using the conservative intersection of opt-in client and server policies |
| Collect new learning observations | No server-originated observations | Yes; counters and rules are stored on the client |
| Apply an accepted learned correction | No | Yes, for an exact matching recent placement and after server validation |
| Client Mod Menu changes server policy | No | No; dedicated-server configuration remains server-owned |
Keybinds
| Default | Action |
|---|---|
| Z | Undo the newest still-eligible placement or axe modification |
| R | Rotate or correct the recent compatible placement under the crosshair |
Both bindings use Minecraft's normal Controls menu and can be reassigned to resolve conflicts. Clicks are drained while any screen is open, so they do not fire while typing in chat, searching inventory, or using a configuration screen.
Configuration
With Mod Menu installed, open Mods → I Meant To Do That → Configure. Pressing Done or closing the screen with Escape sanitizes and saves the current values; the screen has no separate cancel or reset-all control. Without Mod Menu, edit config/imeanttodothat.json while the game or dedicated server is stopped. The file is generated on first launch. Invalid numeric values are clamped to safe ranges when loaded or saved.
Client settings never overwrite the dedicated server's configuration. In full mode, the relevant client choices are advertised as short-lived consent for the current connection; automatic corrections and smart interaction still require matching permission from the server.
Times are stored in ticks. At the normal 20 TPS, 20 ticks is approximately one second; under server lag, expiry follows server ticks rather than wall-clock seconds.
General
| JSON field | Default | Range / meaning |
|---|---|---|
general.enabled |
true |
Master switch for this side |
general.hudPrompts |
true |
Render prompts and result notices |
general.promptDurationTicks |
60 |
20–400 ticks |
general.hudPosition |
BOTTOM_CENTER |
BOTTOM_CENTER, TOP_CENTER, BOTTOM_LEFT, or TOP_LEFT |
general.debugLogging |
false |
Log confidence evidence and invalidation details |
Undo
| JSON field | Default | Range / meaning |
|---|---|---|
undo.placementUndo |
true |
Track safe single-block placements for undo |
undo.modificationUndo |
true |
Track strip, scrape, and unwax actions |
undo.undoWindowTicks |
40 |
Placement window, 5–200 ticks |
undo.modificationUndoWindowTicks |
40 |
Axe-modification window, 5–200 ticks |
undo.historySize |
64 |
Per-player server history, 8–256 entries |
Smart placement
| JSON field | Default | Range / meaning |
|---|---|---|
smartPlacement.stairDetection |
true |
Analyze same-block stair orientation |
smartPlacement.slabDetection |
true |
Detect contextual single-to-double slab changes |
smartPlacement.patternDetection |
true |
Detect conservative block-type or exact-state outliers |
smartPlacement.analysisRadius |
3 |
Stair scan radius, 1–5 blocks horizontally |
smartPlacement.confidenceThreshold |
0.95 |
Auto-correction threshold, 0.50–1.00 |
smartPlacement.mode |
SUGGEST |
SUGGEST or AUTO_CORRECT; stair auto-correction requires the same mode on the server and client consent |
smartPlacement.autoUndoDoubleSlabs |
false |
Use the same safe undo path after a strong detection only when both sides opt in |
Rotation
| JSON field | Default | Range / meaning |
|---|---|---|
rotation.enabled |
true |
Master rotation switch |
rotation.rotationWindowTicks |
60 |
10–200 ticks |
rotation.stairs |
true |
Rotate stairs |
rotation.logsAndPillars |
true |
Cycle X/Y/Z axis for rotated pillars |
rotation.decorativeDirectionalBlocks |
true |
Rotate only the documented decorative allow-list; an arbitrary facing property is not sufficient |
rotation.containers |
true |
Rotate furnaces and barrels |
rotation.redstoneComponents |
false |
Opt in to pistons, observers, dispensers, droppers, and redstone wall torches |
Interactions
| JSON field | Default | Meaning |
|---|---|---|
interactions.enabled |
false |
Per-side opt-in; both client and server must enable it in full mode |
interactions.priorityMode |
VANILLA |
VANILLA, WHILE_SNEAKING, SELECTED_ITEMS, or CONTEXT_SENSITIVE; both policies must allow the action |
interactions.selectedItemIds |
three torch IDs | Up to 32 namespaced block-item IDs; selected items must be allowed by both sides |
Learning
| JSON field | Default | Range / meaning |
|---|---|---|
learning.enabled |
true |
Count matching correction habits and allow enabled accepted rules |
learning.showLearningSuggestions |
true |
Prompt when a rule is ready for explicit review |
learning.repetitionThreshold |
5 |
3–20 matching observations |
Learned rules themselves are managed separately and stored in config/imeanttodothat-learning.json.
Multiplayer
| JSON field | Default | Meaning |
|---|---|---|
multiplayer.clientOnlyDetections |
true |
Permit local visual detection when the server component is absent |
multiplayer.explainUnavailableServerFeatures |
true |
Show a short HUD explanation when Z or R needs the server component |
Multiplayer safety
The client sends bounded action requests and a connection-local preference handshake. The handshake contains a protocol version, three opt-in booleans, one interaction mode, and at most 32 selected item IDs of at most 128 characters each; it is cleared on disconnect and does not alter the server configuration. Rotation/correction requests include the looked-at position or exact learned transition request. The server never trusts any of these values by themselves. Before changing a block it verifies:
- the action belongs to the requesting player's UUID;
- the request is within the action's undo or rotation window;
- the player is alive, not a spectator, not in adventure mode, in the same dimension, and within normal block-interaction range;
- the chunk is loaded;
- the request position matches the recorded position;
- the current block state and block-entity data still match the recorded result;
- no watched mutation occurred after the action;
- the replacement can survive at that position;
- survival inventory can accept the exact refund;
- the request rate is within four correction requests per 20 server ticks.
The server captures item consumption rather than assuming it. If it cannot prove that exactly one item was consumed, placement undo is not offered. Failed restoration attempts are rolled back to the recorded resulting state where possible.
History is cleared or invalidated on logout, respawn, dimension change, chunk unload, and server stop. It is not persisted across restarts.
Privacy
I Meant To Do That contains no telemetry, analytics, advertising, account integration, or external AI calls.
Learning rules and counters are written only to config/imeanttodothat-learning.json on the player's machine. The file contains deterministic action kind, block/state context, proposed state, observation count, acceptance status, and enabled status. It does not contain chat, camera recordings, world scans, coordinates, server addresses, player names, or authentication data.
In full mode, the server sends the client a small observation describing a correction that just happened in that gameplay session. When an accepted rule matches, the client may request that exact correction from the current server; the server already observed the placement and validates the request. The stored rule database is never uploaded or sent to an external service. The separate ephemeral preference handshake contains only current feature consent and interaction-policy values, never learned rules or counters.
Delete one rule or use Reset learning in the configuration screen. Deleting config/imeanttodothat-learning.json while Minecraft is stopped also resets all local learning data.
Known limitations
- Compound placements such as beds and double-height blocks are not undoable. Safely reverting only one half could corrupt the structure.
- Falling blocks, piston bases, rails, and TNT placements are not undoable. Movement, physics, activation, and neighbor effects make a short snapshot insufficient.
- Redstone-component rotation is disabled by default and should be enabled only when its state transition is acceptable on that server.
- The generic pattern warning recognizes a conservative repeated block-type or exact-state row or column. It does not infer palettes, gradients, roofs, symmetry, or arbitrary build intent.
- Stair analysis compares only nearby stairs of the same block. It can flag a clear corner-shape outlier, but it does not plan complex corners or mixed-material stair runs. Manual rotation normalizes a stair to a straight shape before vanilla neighbor updates.
- Double-slab detection requires an existing same-block single slab plus nearby or recent supporting context.
- Axe undo covers stripping, one-stage copper scraping, and wax removal. Applying wax is not itself an undoable action.
- Client-only detection is visual and best-effort. Packet timing or a server correction can make the local observation disappear without an action offer.
- Block entities are restored only from bounded snapshots. If their data changes after placement—items inserted into a chest, furnace progress, commands, automation, or another player—the action is invalidated instead of overwriting newer data.
- Accepted learning rules cover only the exact same-block state transition that was reviewed; they do not generalize across block IDs or choose a material.
- Dedicated-server configuration is not synchronized from a client's configuration screen.
- Action history is in memory only. A server restart, rollback, logout, death/respawn, dimension change, or chunk unload closes outstanding correction windows.
- External rollback tools and mods that bypass normal block mutation hooks are still guarded by the final state/block-entity comparison, but their changes are never reversed automatically.
- English is the bundled language in 1.0.0.


