Overview
Tweakeroo is a client-side quality-of-life mod by masa, in the same MaLiLib family as Litematica, MiniHUD and Item Scroller. It is not one feature — it is a toolbox of roughly 90 independent tweaks (auto-eat, fast placement, free camera, tool auto-switch, zoom…) plus 50 disable toggles that turn vanilla behaviours off. Every tweak is off by default and has no default hotkey; you pick the ones you want.
⬇ Download on Modrinth ⌥ Source (26.x fork, sakura-ryoko)
How this guide was written
There is almost no written documentation for Tweakeroo beyond one gist and the in-game tooltips, so this guide is based on reading the source (sakura-ryoko/tweakeroo, branch 26.3, matching the installed 0.30.0) and MaLiLib. Where the code contradicts a tooltip, the code wins and the difference is called out in a “Source says” note — the full list is in What the Tooltips Get Wrong. A few behaviours were derived from reading and not tested in game; those are marked (unverified).
How Tweakeroo is organised
Tweaks (feature toggles)
- ~90 on/off switches:
tweakFastBlockPlacement,tweakHandRestock… - Each has an optional toggle hotkey
- Their settings live in the Generic tab
Generic
- Numbers, colours, enums for the tweaks
- Plus a few boolean options that also carry a hotkey
- Most “how fast / how far / which mode” answers are here
Hotkeys
- Pure actions and hold-modifiers (flexible placement keys, zoom, elytra camera…)
- Separate from the toggle hotkeys — a tweak can be “on” and still need one of these held
Lists · Fixes · Yeets
- Lists: blacklists/whitelists for items, blocks, entities
- Fixes: 3 bug-fix booleans
- Yeets: the 50
disable*toggles
The pattern to internalise
Most features need up to three things: (1) the tweak switched on, (2) its settings tuned in Generic, and (3) sometimes a separate hold-key pressed while you act (flexible placement, zoom, elytra camera, inventory preview). “I turned it on and nothing happens” is almost always #3 — or one of the gotchas called out in each section.
Requirements
Required
- Fabric Loader + Fabric API
- MaLiLib (library mod)
- Tweakeroo itself
Nice to have
- Mod Menu (config button in the mod list)
- Litematica (Easy Place plays well with the placement tweaks)
- Servux (server-side helper for multiplayer features)
Config GUI & Hotkeys
Open the config screen with XC (the default, and what I use), or the config button in Mod Menu. Everything below is MaLiLib behaviour shared with Litematica and the other masa mods.
The tabs
| Tab | What is in it | Saved in config/tweakeroo.json as |
|---|---|---|
| All | Every entry below in one searchable list | — |
| Generic | Settings (numbers, colours, enums) + a few hotkeyed booleans (freeCameraShow*, toolSwap*…) | Generic |
| Fixes | 3 bug-fix booleans | Fixes |
| Lists | none / blacklist / whitelist selectors and their item, block, entity lists | Lists |
| Tweaks | The feature toggles: ON/OFF button + toggle hotkey | TweakToggles, TweakHotkeys |
| Hotkeys | Stateless actions and hold-modifiers | GenericHotkeys |
| Yeets | The 50 disable* toggles | DisableToggles, DisableHotkeys |
A few values (fly-speed preset, remembered gamma, current hotbar-scroll row) are stored under Internal and have no tab.
Reading a row
- [true/false] button — the toggle itself. Clicking it changes the state but shows no message.
- [hotkey] button — what key(s) flip it. Pressing the hotkey in game flips it and shows an action-bar message “Toggled … on/off”. The hotkey text turns gold when it overlaps another binding; hold SHIFT while hovering to see which.
- [settings icon] — the advanced keybind settings (left-click). Right-click resets them. The icon border turns orange when they differ from the defaults.
- Enum buttons (list types, modes) — left-click cycles forward, any other mouse button cycles backward.
- The search bar accepts a hotkey as the search term — handy for “what is bound to this key?”.
Setting a hotkey
- Click the hotkey button — it shows
> … <. - Press the keys in order (for XC: press X, then C). Each key press appends to the chord; the first press wipes the old binding.
- Click elsewhere (empty space) to finish. ESC before pressing anything clears the binding; ESC after adding keys just ends editing — so ESC itself can never be bound.
What “X,C” actually means
It is a chord you hold, not a tap-tap sequence
XC means: hold X, then press C. It fires the instant the last key goes down. By default the order matters (C-then-X does nothing) and no other key or mouse button may be held — holding W or Shift when you complete the chord blocks it.
- In-game only. Default hotkeys use the in-game context: they do nothing while chat, the inventory or any menu is open.
- The prefix key still reaches vanilla. Only the last key of a chord is swallowed. That is why an unused prefix like X is a good idea — a prefix that vanilla uses (e.g. E) would still open the inventory.
- Two hotkeys on the same keys both fire. Names are physical (QWERTY) key names; mouse buttons are
MOUSE_LEFT / MOUSE_RIGHT / MOUSE_MIDDLE.
Advanced keybind settings
Each hotkey can be tuned with the settings icon. Tweakeroo uses a handful of presets:
| Setting | Meaning |
|---|---|
| Context | In-game only, GUI only, or both |
| Activate on | Press (chord completes), Release (a chord key comes up), or Both |
| Allow extra keys | Other keys may be held. With order-sensitive on, extras are tolerated only if pressed before the chord |
| Order sensitive | Keys must be pressed in the listed order |
| Exclusive | Only fires if no other cancelling hotkey fired since all keys were last released |
| Cancel | Swallow the last key press so vanilla never sees it (default on) |
| Preset | Used by |
|---|---|
| Default (in-game, on press, no extras, ordered, cancel) | All toggles, openConfigGui, fly presets, free-camera presets, elytraCamera… |
| Both edges (press + release) | The 9 adjustable toggles (next section) |
| Press, allow extra keys | Flexible-placement keys, accurate-placement keys, inventoryPreview, playerInventoryPeek, placementYMirror, area selection keys, hotbarSwapBase |
| Release, allow extra keys | hotbarScroll (acts when you let go) |
| Both edges, allow extra, unordered, no cancel | zoomActivate, swapSpyglassAndActivate |
Hold the toggle key and scroll — the “adjustable” toggles
Nine toggles have a hidden second function: hold the toggle hotkey and scroll the mouse wheel to change the related number without opening the GUI. To make that possible they fire on release, and if you scrolled while holding, the toggle is suppressed. So: tap = toggle, hold + scroll = adjust.
| Toggle | Scroll adjusts |
|---|---|
tweakAfterClicker | afterClickerClickCount (±1) |
tweakPlacementLimit | placementLimit (±1) |
tweakPlacementGrid / tweakBreakingGrid | placementGridSize / breakingGridSize (±1) |
tweakHotbarSlotCycle / tweakHotbarSlotRandomizer | hotbarSlotCycleMax / hotbarSlotRandomizerMax (±1) |
tweakSnapAim | Yaw step ×2 (up) / ×0.5 (down); pitch step in pitch mode |
tweakFlySpeed | Active preset ±0.005 per notch (works even if the tweak is off) |
tweakZoom key (or holding zoomActivate) | zoomFov; CTRL = bigger step |
Source says: the periodic tweaks are NOT scroll-adjustable
Several tooltips (and older guides) say the periodic attack/use timings can be scrolled the same way. In 0.30.0 that code is commented out. Edit periodic*Interval and periodicHold*Duration in the Generic tab instead.
Lists tab
- Each
…ListTypecycles none → blacklist → whitelist. none ignores both lists; a whitelist that is empty allows nothing. - Click a list button to edit — one entry per row. Item, block, entity and effect lists take exact registry ids such as
minecraft:budding_amethyst. No wildcards;#tagsonly work insilkTouchOverrideandpickaxeOverride. An unknown id is skipped with a log warning — no error in the GUI (mine hasminecraft:fireworkswhere the id isminecraft:firework_rocket; harmless because that list type is none). - Most lists are re-parsed when you close the config screen (or join a world), not live.
Saving
Config is written on GUI close and when you leave a world
A toggle flipped by hotkey is not on disk until you close a config screen or return to the title screen — a crash loses it. Hand-editing tweakeroo.json while inside a world is overwritten when you quit; edit it from the title screen.
Auto-Eating (Periodic Hold Use)
Tweakeroo has no “auto-eat” feature. Eating is built from Periodic Hold Use — it presses and holds right-click for a while, releases, waits, and repeats. Because vanilla only lets you eat when you are hungry, an attempt at full hunger does nothing, and the trick works as auto-eat. It is non-intuitive because several settings do not mean what their names suggest.
The short recipe
- Enable only
tweakPeriodicHoldUse(Tweaks tab). LeavetweakPeriodicUse,tweakHoldUse,tweakFastRightClickandtweakPeriodicHoldAttackoff. Bind a toggle key (mine: XU). - Generic →
periodicHoldUseDuration≥ eat time + ping. Single player: 34–36. Servers: eat time + ping in ticks + 2 (see the table). Too short and the bite is cancelled every cycle. - Generic →
periodicHoldUseInterval= the pause between attempts, e.g. 100 (5 s). A long pause is fine — each attempt eats at most one item, and only if you are hungry. - Put the food where vanilla will use it. Safest: food in the main hand (selected hotbar slot). Or food in the off hand with a harmless main-hand item (sword, pickaxe, empty hand, stick) — see Which item gets used.
- Turn on
tweakHandRestockand keep spare stacks of the identical food in your inventory so the stack refills itself. - Close any open screen. The first attempt happens Interval ticks after you enable it (and after every screen closes).
How the timing really works
The tweak runs once per game tick (20 Hz) as a tiny state machine. With I = periodicHoldUseInterval and D = periodicHoldUseDuration:
- While released, a counter counts up; when it reaches I the key is pressed and
startUseItem()is called immediately. - While pressed, another counter counts to D, then the key is released. The interval counter restarts from 0.
- So the cycle is I + D ticks and I is the gap after release, not the time between presses.
- Opening any screen (inventory, chat, pause) resets both counters. Counting restarts from zero when it closes.
- Releasing the key while you are still eating cancels the bite — that is why D must exceed the eating time.
Source says: “interval” is not “ticks between starting to hold”
The tooltip claims periodicHoldUseInterval is the number of ticks between starts. In the code it is the pause after release, so the real period is Interval + Duration. With the defaults (20/20) that is 40 ticks — and a 20-tick hold cannot finish a 32-tick meal, so the defaults never eat anything.
Choosing Duration (D)
| Item | Eat time | Minimum useful D (single player) | D on a server |
|---|---|---|---|
| Most food, potions, milk | 32 ticks (1.6 s) | ≈ 34–36 | 32 + ping ticks + 2 |
| Honey bottle | 40 ticks (2.0 s) | ≈ 42–44 | 40 + ping + 2 |
| Dried kelp | 16 ticks (0.8 s) | ≈ 18–20 | 16 + ping + 2 |
The bite is completed by the server, so add round-trip latency (50 ms = 1 tick). D = 40 covers normal food up to roughly 250 ms ping but is marginal for honey. If D is much longer than the meal (≈ 64+), the still-held key starts a second bite that is cancelled at release — harmless, but pointless.
Which item gets used
- Vanilla tries the main hand first, then the off hand. A hand is skipped only if its item returns “pass” or “fail” — e.g. food while you are not hungry fails, so the off hand gets its turn.
- Anything in the main hand that has a right-click use wins over off-hand food: blocks (they get placed), bows, crossbows, shields, buckets, ender pearls, spawn eggs, fireworks, fishing rods, maps, spyglasses, flint & steel, and axes/hoes/shovels (strip/till/path the block you aim at).
- Aiming at a door, button, chest, crafting table, bed or villager means the block/entity interaction wins — and opening a screen resets the cycle.
- Vanilla will not start using an item while you are mid-way through breaking a block, and mining pauses while you eat. Auto-eat while holding attack on a block is unreliable.
Why the other toggles do not work for eating
| Tweak | What it does | Eat? |
|---|---|---|
tweakPeriodicHoldUse | Holds use for D ticks, waits I ticks, repeats | ✓ Yes |
tweakPeriodicUse | One click every N ticks; the key is never held | ✗ No — vanilla cancels a use when the key is not down. Use it for instant actions (placing, buckets, flint & steel, machines) |
tweakHoldUse | Holds use permanently, every tick | Eats once, then re-tries forever — and undoes the periodic release if both are on. Never combine |
tweakFastRightClick | N extra use clicks per frame while use is held | Not for eating; packet spam |
If both hold-use and periodic-use are on, hold wins and periodic-use is ignored.
Keeping the food stocked (Hand Restock)
With tweakHandRestock on, finishing a meal does trigger a restock (a hook on “item finished being used”). Two conditions matter:
- The restock cache only survives while the use key is still down — true for Periodic Hold Use whenever D is longer than the eating time.
- The replacement must be identical (same item and same components — a renamed or enchant-glint stack will not match). It is searched in inventory rows (and the hotbar too, unless slot-cycle/randomizer is on). See Hand Restock.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| Nothing is ever eaten | D shorter than the meal (defaults 20/20 always cancel), or a screen keeps resetting the cycle |
| Takes a long time to start | The first press comes I ticks after enabling (I = 40 → 2 s) |
| Blocks get placed / bow fires / shield goes up | Main-hand item is being used instead of the food |
| Golden apples / potions / honey vanish at full hunger | Always-edible items are consumed every cycle |
| Right-click stays “stuck” after toggling off | Turning a periodic-hold tweak off mid-hold does not release the key — click physically once, or open a screen |
| Off-hand food gets swapped away | tweakRepairMode treats non-damageable off-hand items as “done” and swaps in a Mending item |
| Stack count looks wrong while eating | Slot-sync workaround drops server slot updates while use is held with fast placement on (see Fast Placement) |
My current setup
Toggle XU, Duration 40, Interval 40 → an 80-tick cycle with the key down half the time. It works for normal food, but a longer Interval (100+) reduces the time right-click is held and the chance of surprising side effects. XY (tweakPeriodicUse) is a separate auto-clicker and cannot eat.
The Auto-Click Family
Six tweaks click or hold the mouse for you. They differ in what they press, how often, and when they run — and the tooltips are misleading on timing.
| Tweak | Behaviour | Timing | Good for |
|---|---|---|---|
tweakPeriodicAttack | One left-click every periodicAttackInterval ticks. The key is never held | per tick | Mob farms, single hits |
tweakPeriodicUse | One right-click every periodicUseInterval ticks | per tick | Placing, buckets, flint & steel, machines |
tweakPeriodicHoldAttack | Holds attack for periodicHoldAttackDuration, waits …Interval | per tick | AFK mining (holding attack never hits entities) |
tweakPeriodicHoldUse | Same, for use | per tick | Auto-eat, bow draw, AFK use |
tweakHoldAttack / tweakHoldUse | Emulate permanently holding the button | every tick | Continuous mining / using |
tweakFastLeftClick / tweakFastRightClick | N clicks while you hold the button | per rendered frame | Rapid-fire creative breaking/using |
Things to know
- Fast clicks are per frame, not per tick.
fastLeftClickCount/fastRightClickCountdefault to 10; at 120 fps that is 1,200 clicks per second. Turn the count down on servers. - Fast Left Click is a silent no-op in survival with a tool (pickaxe, axe, shovel, hoe, shears, flint & steel, fishing rod, brush) unless
fastLeftClickAllowToolsis on. Swords, bows and an empty hand work. It also removes vanilla’s 10-tick miss penalty. - Fast Right Click is filtered by
fastRightClickListType(item lists) andfastRightClickBlockListType(block lists). Both hands are checked. My block blacklist keeps it off chests, ender chests, trapped chests and a white shulker box. - Periodic Hold Attack double-fires: the initial press is also a queued click, so each cycle swings twice (the second lands with ~0 cooldown). Prefer Periodic Attack or Fast Left Click for combat.
- Don’t stack the “normal” and “periodic” forms of the same button (the tooltips say so, and the code picks hold over periodic).
- Every periodic tweak resets while a screen is open.
Hand Restock
tweakHandRestock refills your main hand or off hand from your inventory when a stack runs low or out — while placing, using, attacking, or finishing a consumable. It is two separate mechanisms:
1 · Pre-restock (merge)
When handRestockPre is on and the stack in hand is ≤ handRestockPreThreshold (default 6) — and the item stacks to more than the threshold — an identical stack from inventory rows is merged into your hand. Scans slots low → high. Never applies to unstackable items.
2 · Full restock (swap/select)
When the hand is empty (or holds a different item), a replacement is searched high → low: hotbar first, then inventory. A hotbar source just selects that slot; an inventory source is swapped into the hotbar. Off hand: swapped in directly.
- Identical means identical. Same item and same components (enchants, custom name…). Damageable tools use a different search: same item type with enough durability left and at least the same Silk Touch/Fortune level.
- The stack must be cached at the start of the use/attack, and the cache is dropped on any frame where neither use nor attack is held or a screen is open. That is why restock works for held-key actions.
- It also fires on: finishing a consumable, break-replace, and a popped totem (re-equips another totem).
- It never touches shulker boxes, bundles, ender chests or other containers. If nothing matches, it silently does nothing.
- Hotbar sources are excluded when
tweakHotbarSlotCycleortweakHotbarSlotRandomizeris on. - Lists:
handRestockListType(none / blacklist / whitelist). My blacklist holds the bucket family, but the list type is none so it is inactive — switch the type to blacklist to use it.
Tool & Weapon Switch, Repair
Tool Switch (tweakToolSwitch)
- Fires when you start digging a block (and again if the target changes while attack is held). It does not switch back.
- The
toolPickhotkey does the same on demand for the block you look at, without needing the tweak on. - Candidates are scanned hotbar first, then inventory; a later slot only wins if strictly better, so equal tools resolve to the lowest hotbar number.
- A tool coming from the inventory is swapped into a slot from
toolSwitchableSlots— an empty one if possible, else one holding a non-tool (swords, food and blocks count as non-tools and get displaced!). - Blocks with no tool tag (torches, flowers) never switch.
Slot syntax
toolSwitchableSlots and toolSwitchIgnoredSlots take hotbar numbers 1–9 and single-digit ranges, comma-separated, no spaces: 1,3-5. Defaults: switchable 1-9, ignored empty. If the currently selected slot is in the ignored list, switching is skipped entirely.
How a tool is chosen
The rules are checked in order and the first one with an opinion wins. The toolSwap* options in Generic switch individual rules on or off:
- Bamboo → sword first (
toolSwapBambooUsesSwordFirst, on) - Leaves → hoe instead of shears (
toolSwapLeavesUsesHoeFirst, off) - Wool/vines/cobwebs → shears (
toolSwapNeedsShearsFirst, on) - Beacons/glass-type → pickaxe (
toolSwapNeedsPickaxeFirstand thepickaxeOverridelist) - Fortune vs Silk Touch:
toolSwapPreferFortuneOverride,toolSwapPreferSilkTouch(on),toolSwapSilkTouchFirst(glass, ender chests; on),toolSwapSilkTouchOres,silkTouchOverride - The correct tool for the block, then better enchantments (
toolSwapBetterEnchants), better material (netherite > diamond > iron > copper > stone > gold > wood), then simply faster breaking speed
Weapon Switch (tweakWeaponSwitch)
- Fires at the start of every attack on an entity, no switch back. Skipped if the selected slot is ignored or you already hold a mace.
entityWeaponMappinglines look likeminecraft:minecart, minecraft:boat => minecraft:netherite_axe, minecraft:diamond_axe.<default>on the left is the fallback. An entity line replaces the default (no merge).- The mapping is a preference, not a filter — if no mapped weapon is found you may still get an axe, bow or trident.
- Source says:
<ignore>on the right-hand side does not prevent switching in the code (it only means “nothing is preferred”). And the mace can never be chosen even if listed.
Swap Almost-Broken Tools (tweakSwapAlmostBrokenTools)
- Checked every time you use, click or dig (not passively). “Nearly broken” = uses left ≤
itemSwapDurabilityThreshold(default 20). - Source says: for items with ≤ 100 max durability the limit becomes 8% of max durability if that is smaller (gold tools → 3, wooden → 5, flint & steel → 6). The tooltip says 5%.
- Swap order: identical item with more durability → an empty inventory slot (the tool goes there and your hand empties) → any non-damageable item (which can be food or blocks!).
toolSwapAllowUnenchantedToBreak: unenchanted tools are allowed to break.
Repair Mode (tweakRepairMode)
Every tick, for each slot in repairModeSlots (default mainhand, offhand; also head/chest/legs/feet), if the item there is fully repaired, has no Mending, or is not damageable at all, it is swapped with a damaged Mending item from the inventory. Empty slots are never filled.
It evicts food and torches from your hands
With the default slots, an off-hand stack of food or torches counts as “done” and is swapped out for a Mending item. Don’t combine Repair Mode with off-hand auto-eat.
Hotbar Scroll & Hotbar Swap
Two ways to bring the 3 inventory rows to the hotbar without opening the inventory.
Hotbar Scroll (tweakHotbarScroll)
- Hold the
hotbarScrollkey — an overlay shows the 3 rows plus the hotbar with a red outline on the current row. - Scroll to move through rows 1 → 2 → 3 (wraps).
- Release — the hotbar swaps with that row.
The row is remembered in hotbarScrollCurrentRow. The wheel is swallowed while held, so the normal hotbar does not move. It acts on release.
Hotbar Swap (tweakHotbarSwap)
hotbarSwapBase only draws the overlay while held. hotbarSwap1/2/3 each swap the whole hotbar with inventory row 1/2/3 (top row = 1) via nine slot swaps. They do not check that the base key is held — a typical binding is base LEFT_ALT, swaps LEFT_ALT1 / 2 / 3. Overlay position: hotbarSwapOverlayAlignment + offsets.
I have XH as the toggle for Hotbar Scroll, but the hotbarScroll key itself is unbound — bind it before expecting anything.
Fast Placement & Placement Restrictions
Fast Block Placement lets you hold right-click and sweep the cursor over new spots to place a block on each one, instead of clicking per block. Placement Restriction constrains where those blocks may go (a plane, a column, a line…) so a sloppy sweep still builds something straight.
Fast Placement silently does nothing unless a restriction (or grid) is also on
The first-click state that fast placement needs is only recorded when tweakPlacementRestriction or tweakPlacementGrid is on. With both off, tweakFastBlockPlacement appears enabled but vanilla’s slow 4-tick repeat applies. This is what the option placementRestrictionTiedToFast (default on) is for: it makes tweakPlacementRestriction follow the Fast Placement toggle. Want unrestricted fast placement? Turn on tweakPlacementGrid with placementGridSize = 1, or use Layer mode with restrictionLayerHeight = 0.
It also breaks vanilla “hold right-click to repeat” (note blocks, buttons, levers…)
Vanilla repeats a held right-click every 4 ticks. With Fast Placement and a restriction on, your first successful right-click on anything (a note block returns “success”) records a first-click anchor, and Fast Placement then takes over: every frame it re-arms the use cooldown to 4, so vanilla’s own repeat never fires — while its own loop finds nothing to place on a non-replaceable block. Result: one click, then nothing, while left-click (attack) still repeats normally. Fix: turn Fast Placement off (XG — that also switches the tied restriction off), or leave it on and use tweakPeriodicUse (XY) for the AFK clicking, which doesn’t depend on a held key.
Quick start
- Enable
tweakFastBlockPlacement(mine: XG). With “tied to fast” on, the restriction turns on with it. - Choose a restriction mode with X1…6 (table below). The hotkey message shows the active mode.
- Hold right-click and place a first block, then sweep the cursor across new positions. Everything after the first block obeys the restriction and uses the first block’s orientation.
- Release right-click — the “first block” anchor resets. The next click starts a new anchor.
The restriction modes
Anchor = the position of your first block and the face you first clicked (call its axis A).
| Mode | Hotkey (mine) | What is allowed |
|---|---|---|
| Plane | X1 | Same coordinate along axis A as the first block — a flat sheet. First click on a floor top = everything at that height; on a north wall face = same Z plane |
| Face | X2 | No position test at all — you may only place against faces pointing the same direction as the first face (e.g. only top faces) |
| Column | X3 | Same position in both other axes — a 1-wide straight line along A (vertical tower from a floor click) |
| Line | X4 | In the plane, share at least one coordinate with the first block — a “+” cross of two lines; you can swap between them mid-drag |
| Diagonal | X5 | In the plane, equal distance on both axes — an “X” |
| Layer | X6 | Ignores the clicked face; allows Y within restrictionLayerHeight blocks of the first (default 1 = the same layer; 0 = anywhere; negative goes downward) |
restrictionLayerHeight has no tooltip and no scroll handler, despite the lang text — set it in the config screen. The default mode when nothing is chosen is Face.
Related placement filters
tweakPlacementGrid(placementGridSize, default 3): block coordinates must be multiples of the size away from the first block, on all three axes. Scroll-adjustable. Also satisfies the fast-placement requirement.tweakPlacementLimit(placementLimit, default 3): at most N blocks per hold of right-click; further clicks do nothing until you release. Scroll-adjustable.tweakPlacementRestrictionFirst: only place against the same block type you first clicked.tweakPlacementRestrictionHand: only place against blocks that match the item in your hand. With an empty hand or a mismatch, every right-click on a block does nothing.
Settings
| Setting | Default | Notes |
|---|---|---|
fastBlockPlacementCount | 2 (1–16) | Blocks per rendered frame, not per game tick — the effective rate scales with your FPS |
fastPlacementRememberOrientation | on | Every fast block uses the yaw you had at the first click (facing-based blocks all line up). Costs two extra look packets per block |
fastPlacementItemListType + lists | blacklist | My blacklist: ender chest, white shulker box only. Both hands are checked — a blacklisted item in the off hand disables fast placement |
slotSyncWorkaround | on | Drops server “your stack is N” corrections for the selected slot and off hand while use is held, to avoid flicker. The displayed count may be stale until you release |
slotSyncWorkaroundAlways | off | Apply that workaround whenever use is held — for other rapid-use mods such as Litematica Easy Place |
How a sweep works
Each frame, up to fastBlockPlacementCount times: re-pick the block under the crosshair; place if it is a new position (only the last placed position is remembered), the spot is replaceable, the restriction allows it, and Restriction First/Hand agree. After each successful placement the ray is re-picked immediately — that is how a count of 2 places two blocks along your line of sight in one frame.
Face mode + flexible rotation only places one block
Face mode compares the rotated face with the first clicked face; with remembered flexible rotation those are never equal, so only the first block goes down. Use Plane, Column, Line, Diagonal or Layer with flexible placement.
Flexible & Accurate Block Placement
Vanilla decides a block’s orientation from where you stand and look. Flexible Block Placement lets you choose the orientation — and an offset — by which part of a block face you click while holding a modifier key. Accurate Block Placement is the simpler cousin: it just points the block into or away from the clicked face.
Two switches, both needed
Enable tweakFlexibleBlockPlacement and hold one of its keys (Hotkeys tab): flexibleBlockPlacementRotation (mine LEFT_ALT), …Offset (mine LEFT_CONTROL), …Adjacent (unbound). The targeting overlay only draws when the tweak is on, you are looking at a block, and at least one key is held. Right now my tweakFlexibleBlockPlacement is OFF, so Alt/Ctrl do nothing.
The face overlay
Each face is split into a centre square (the middle half of the face) and four trapezoids cut by the diagonals. The region under your crosshair is highlighted in the overlay colour (flexibleBlockPlacementOverlayColor).
For floor and ceiling faces the “left/right/up/down” directions are taken from the way you are facing, so the same physical spot gives a different result depending on which way you stand.
What the three keys do
| Key | Effect |
|---|---|
| Rotation | The block is oriented per the region (above). Works via yaw faking on any server, and via the accurate-placement protocol where supported |
| Offset | Shifts the placement one block toward E. A centre click lands the block two blocks out with a one-block gap; an edge click places it diagonally |
| Adjacent | Only for edge regions: places in the neighbouring position in the direction of that region, in the same layer as the clicked block. The centre does nothing |
- Keys stack (adjacent → rotation → offset). Adjacent is not remembered by
rememberFlexibleFromClick. - With
rememberFlexibleFromClick(on) the mode from your first block persists while right-click stays down — you don’t need to keep holding the keys during a sweep (needs a restriction/grid on — see Fast Placement). - These keys click the air block in front of the face, never the real block, so you never open a chest or table you’re pointing at.
tweakFakeSneakPlacementgives a similar benefit without a key.
Recipes
| You want | Hold | Click |
|---|---|---|
| Piston / observer / dropper pointing up from a floor | Rotation | CENTER of the top face |
| Vertical block on a wall, pointing up / down | Rotation | TOP / BOTTOM region of the wall face |
| Sideways-facing block on a wall | Rotation | LEFT / RIGHT region |
| Block one gap away, or diagonally placed | Offset | CENTER (gap) or an edge (diagonal) |
| Stairs / repeaters / furnaces (horizontal-only) | Rotation | Sides use the yaw rules; vertical E falls back to yaw |
Accurate Block Placement (the simple one)
tweakAccurateBlockPlacement plus two hold-keys: accurateBlockPlacementInto (block faces into the clicked block — pistons, droppers, dispensers) and accurateBlockPlacementReverse (the opposite of what vanilla would place). Both are unbound by default, and they draw no overlay. It works only through the protocol below; without protocol support the keys do nothing. Right now the tweak is on but both keys are unbound, so it does nothing.
Does it work on this server? — the placement protocol
Blocks whose orientation is not just “the face you clicked” (logs, quartz pillars, most facing blocks) need the server to decode a hidden value the client encodes in the click position. Without it the client predicts the rotation but the server places the vanilla block, and it visibly snaps back.
| Where you play | What works |
|---|---|
| Single player / LAN host | Everything. Needs clientPlacementRotation (on) |
| Server with Servux (1.21+) | Everything (protocol v3) |
Server with Carpet and the accurateBlockPlacement rule, or QuickCarpet | Everything (protocol v2) |
| Vanilla server / Realms / Paper | Only blocks that depend on the clicked face (hoppers, logs by face…), plus yaw-based blocks via yaw faking. Turn accuratePlacementProtocol off here, or expect ghost blocks |
accuratePlacementProtocol(bool, on) decides whether the client sends the encoded value.accuratePlacementProtocolMode(auto / v3 / v2 / slabs-only / none) only controls decoding — slabs-only and none behave identically. Toggle the bool withtoggleAccuratePlacementProtocol(bind it if you move between servers).- Auto = v3 in single player or on Servux, v2 on a Carpet server, otherwise slabs-only.
itemUsePacketCheckBypassonly exists on the integrated server (the mod is client-only); it does nothing for a dedicated server.clientPlacementValidation(on) refuses placements whose resulting state can’t survive.- With the protocol active, rotation-placed stairs and trapdoors are forced to the bottom half regardless of where you click.
Other Placement Tweaks
| Tweak | What it does & what to watch for |
|---|---|
tweakFakeSneakPlacement | With a block in hand, clicks the air beside the target — place against chests, tables, doors and levers without sneaking. Non-block items behave normally |
tweakYMirror + placementYMirror | Hold the key to mirror the click height inside the block: place top slabs/stairs when clicking a top face, and vice versa. Key unbound by default. Can be defeated by the protocol’s forced bottom half |
tweakAngelBlock | Creative only. Place a block in mid-air angelBlockPlacementDistance (default 3, max 5) blocks away when you click on nothing. Does not repeat while held |
tweakScaffoldPlace | Click any block of a row of the same block to extend it, up to scaffoldPlaceDistance (5). Danger: with it on, every right-click on a block does nothing unless you hold a block item and a valid extension spot exists — no bone-mealing, no opening chests with an empty hand |
tweakAfterClicker | Sets repeaters/comparators/note blocks as they’re placed. With the protocol on it sends no clicks; instead it encodes the count into the placement (N=1–4 sets a repeater delay of 1–4 in single player) and only works alongside Accurate placement or flexible rotation. With the protocol off it sends N real right-clicks. Scroll-adjustable |
tweakPickBeforePlace | Before each placement, picks the block you’re pointing at (not what you hold) — creative pick, or a survival swap from inventory. Turns slotSyncWorkaround off |
tweakBreakReplace | Right after you break a block, immediately places the block you hold in its spot (bypasses all restriction rules) |
tweakSignCopy + copySignText | Stores the last sign’s text and stamps it onto every sign GUI you open. Pair with disableSignGui: write one sign, then enable Disable Sign GUI and place copies. Danger: overwrites any sign whose GUI you open. Text only (styling dropped), memory only |
tweakHotbarSlotCycle / Randomizer | After each placed block, move to the next hotbar slot (cycle) or a random one (randomizer), up to the max slot (a 1-based count: max 2 = slots 1–2). Both stop Hand Restock pulling from the hotbar. Scroll-adjustable |
tweakHangableEntityBypass | Item frames and paintings are ignored by your crosshair (unless sneaking; flip with hangableEntityBypassInverse) — click the block behind a frame |
tweakItemUnstackingProtection | Stops using items in unstackingItems (buckets, bottles) when the result wouldn’t fit — prevents pouring lava into your inventory. Needs an empty main-inventory slot; the off hand doesn’t count |
Breaking Tweaks
The breaking side mirrors placement.
tweakBreakingRestrictionwithbreakingRestrictionMode(default Line) — same six modes as placement (Plane, Face, Column, Line, Diagonal, Layer), anchored on the first block you start mining and the face you hit. Blocks outside the pattern are simply skipped. Mode hotkeysbreakingRestrictionMode*have no default keys. Recipes: mining a wall → Plane; a straight shaft → Column; clearing from the top → Layer (height 1).tweakBreakingGrid(breakingGridSize, default 3; mine XB): only break blocks on a grid. Scroll-adjustable.tweakBlockTypeBreakRestriction: white/blacklist of blocks that may be broken by hand. Mine blacklistsminecraft:budding_amethystso I can’t destroy a budding block by accident. Warning style:blockTypeBreakRestrictionWarn.tweakEntityTypeAttackRestriction: white/blacklist of entities you may attack. Mine blacklistsminecraft:villager. Right-click interaction (trading) is unaffected.disableBlockBreakCooldown(Yeets) removes the delay between breaking blocks.- Fast Left Click, Hold Attack and Periodic Hold Attack are covered in the auto-click family.
Free Camera
tweakFreeCamera detaches the view from your body: you fly a spectator-style camera through walls while your real character stays where it was. Toggle it with its hotkey (unbound in my config), or type #fc in chat.
Your body is still live and still killable
The real player keeps ticking — gravity, drowning, fire and mobs all apply. Enabling it mid-air only zeroes your velocity when you’re on the ground. Enable it somewhere safe. Free camera is force-disabled on every dimension change or respawn and is never saved.
Controls & behaviour
- Mouse look rotates the camera; movement keys fly it (JUMP up, SNEAK down, sprint ×3 forward). Default speed is 0.7 blocks/tick.
- With
tweakFlySpeedon, the active fly-speed preset also sets camera speed (preset × 10 blocks/tick) — soflyPreset1–4and scroll-on-toggle control it. - Attack, use, place, break and entity interaction are blocked by default. The camera does not collide with blocks and ignores fluid overlays.
- Your body is rendered in the world. Hands, hotbar and status bars are hidden unless
freeCameraShowHands,freeCameraShowHotBar,freeCameraShowStatusBarsare on. - You only see chunks the server sent around your real position.
tweakRenderEdgeChunksrenders the outermost loaded chunks, which helps a lot here.
Options
| Option | Effect |
|---|---|
freeCameraPlayerInputs | Clicks act for your real player (using the real player’s target), so you can interact while watching from elsewhere |
freeCameraPlayerMovement | Movement keys drive the real player while the camera stays put — a remote viewport. Reset to off every time free camera turns on |
freeCameraShowHands / HotBar / StatusBars | Show those HUD parts while in free camera (the StatusBars hotkey field is inert) |
Watch a farm while you work
Save a preset over the machine, then enable freeCameraPlayerInputs + freeCameraPlayerMovement: the camera stays on the farm while you walk around and act as your real player.
Camera presets
Save and recall viewpoints. All preset hotkeys are unbound by default.
| Hotkey | Action |
|---|---|
freeCameraPresetAdd | Save the current camera position/angle as “Preset N” (works even outside free camera) |
freeCameraPresetCycle | Recall the next preset in this dimension (turns free camera on). Refuses if you’re already within 0.75 blocks / 35° of it |
freeCameraPresetDelete | Delete the preset near the camera (same 0.75-block / 35° test) |
freeCameraPresetDeleteAll | Delete all presets in the current dimension |
openCameraPresetEditorGui (XP) | Editor: list (Dimension/All), Create New, Clear; per row Recall, Rename, Set Here, Remove |
- Storage:
config/tweakeroo/<world or server>.json, one file per world holding all dimensions. Singleplayer uses the world folder name; multiplayer uses the server address; all Realms share one file. - Written only when you leave to the title screen. By code reading, presets from one world can appear in another world that has no preset file yet (unverified).
- The cycle position is global; after changing dimension the first cycle can land on the last preset.
The #fc chat command
Type in the chat box (with #, not /) — it is handled locally and never sent. No argument toggles free camera.
| Command | Aliases | Does |
|---|---|---|
#fc add [name] | a, new | Save a preset |
#fc set <id> | s, update | Re-save a preset here — stores eye position, so it returns about 1.6 blocks too high; prefer the editor’s “Set Here” |
#fc del <id> | d, delete | Delete. (An id is required — the “delete at position” branch is dead code) |
#fc del_all | da | Delete all in this dimension |
#fc list | l | List presets in this dimension |
#fc rename <id> <name> | n, ren | Rename |
#fc recall <id> | r, goto | Jump the camera to a preset |
#fc cycle [id] | c | Cycle |
#fc help [sub] | h | Help |
Zoom, Elytra Camera & Snap Aim
Zoom and Elytra Camera each need two things
The toggle hotkey (tweakZoom, tweakElytraCamera) only switches the feature on. The action is a separate held key: zoomActivate and elytraCamera. In my config both action keys are unbound, so neither does anything yet.
Zoom (tweakZoom)
- Hold
zoomActivateto replace your FOV withzoomFov(default 30). A value above your normal FOV zooms out. - Scroll while zoomed (holding the
tweakZoomkey orzoomActivate) to changezoomFov; CTRL uses the bigger stepzoomFovDifferenceCtrl(5 vs 1). Wheel up = zoom in. RangezoomMinimumFov…zoomMaximumFov. zoomAdjustMouseSensitivity(on) lowers sensitivity while zoomed. Gotcha:zoomResetFovOnActivate(restore the scroll-changed FOV on release) only works while sensitivity adjustment is on.tweakSpyglassUsesTweakZoom: spyglass use zooms tozoomFovand scrolls the same way.swapSpyglassAndActivate(pull a spyglass from the inventory intoutilityHandSlotand scope; release swaps it back) does nothing unless this tweak is on.
Elytra Camera (tweakElytraCamera + elytraCamera)
Hold elytraCamera and the mouse only moves a separate camera angle while your real rotation (flight direction) stays fixed — look down at your build while flying dead straight. Release and the view snaps back. elytraCameraIndicator (never / with_key / always) draws a bar showing your real pitch. The key uses default settings (no extra keys) — press it before other keys or mouse buttons, or enable “allow extra keys” on it.
Snap Aim & Aim Lock
tweakSnapAimrounds your aim to a multiple ofsnapAimYawStep(default 45° = 8 compass headings) and/orsnapAimPitchStep(12.5°).snapAimMode: yaw / pitch / both. Yaw 0 = south, 90 = west, −90 = east, 180 = north.- With
snapAimOnlyCloseToAngle(on) it only sticks withinsnapAimThresholdYaw(5°) /…Pitch(1.5°) of a step, otherwise aim is free — a magnet feel. Off = hard steps. - Gotcha: with pitch step 12.5 and “only close” off, straight down (90°) is unreachable (snaps to 87.5°). Use a step that divides 90 (15, 22.5, 30, 45).
tweakSnapAimLockfreezes the last snapped value (needs SnapAim on);tweakAimLockfreezes yaw+pitch at their current values (independent). The other axis stays free in single-axis modes.- The indicator flashes for 0.75 s (
snapAimIndicator, colour configurable).
Movement & Miscellaneous Tweaks
| Tweak | Notes |
|---|---|
tweakFlySpeed, flyPreset1–4, flyIncrement1/2 | Creative/spectator fly speed presets (0.01 / 0.064 / 0.128 / 0.32; vanilla is 0.05). Increment keys permanently add ±0.128 to the active preset. Turning the tweak off restores 0.05. The server may still clamp |
tweakCustomFlyDeceleration | Stop faster when you release movement keys while flying (flyDecelerationFactor, default 0.4 — lower = stops sooner) |
tweakPermanentSneak / Sprint / Swim | Sneak in GUIs only if permanentSneakAllowInGUIs. Sprint only when moving forward, not in water/using an item, food > 6. Swim ≠ sprint-swim. Mine: XN for sneak |
tweakFakeSneaking | Ledge protection without slowing down or changing pose (mine XK). Unrelated to Fake Sneak Placement |
tweakMovementKeysLast | When opposite keys are held, the later one wins. Conflicts with permanent sneak, which rebuilds the input and discards it |
tweakBlockReachOverride / EntityReachOverride | Custom reach (blockReachDistance 4.5, entityReachDistance 3.0). Single player: as set. Multiplayer: capped at server reach +1 (block) / +3 (entity). Expect strict servers to reject more |
tweakGammaOverride | Brightness beyond vanilla’s slider (gammaOverrideValue 16). It fights the video-settings slider — turn it off to change base brightness |
tweakDarknessVisibility, tweakWaterVisibility, tweakLavaVisibility | Water and lava visibility only apply while you wear a helmet; darkness softens the Darkness pulse |
tweakPlayerListAlwaysVisible | Tab list permanently on-screen |
tweakF3Cursor | Always draws the F3 3D axes — and hides the normal crosshair |
tweakPotionWarning | Action-bar warning every 5 s for effects with ≤ 600 ticks left; filter with potionWarningListType and lists |
tweakPrintDeathCoordinates | Prints your coordinates and dimension to chat on death (click to suggest) |
tweakChatTimestamp / ChatBackgroundColor / ChatPersistentText | Timestamps (chatTimeFormat is Java SimpleDateFormat; an invalid pattern errors on every message); background colour; keep unsent chat text (which then replaces the / you pressed to open chat) |
tweakCustomInventoryScreenScale | Force GUI scale customInventoryGuiScale on all container screens |
tweakTabCompleteCoordinate | Tab-completing coordinates (not aiming at a block) uses your position instead of ~ |
tweakRenderLimitEntities / RenderInvisibleEntities | Cap item/XP-orb rendering per frame (−1 = unlimited, 0 = hide all); render invisible entities like in spectator |
sitDownNearbyPets / standUpNearbyPets | Right-click each of your tamed pets within 6 blocks. Hold an empty hand (food, dye or armor would feed/dye/equip) |
toggleGrabCursor, skipWorldRendering | Release/grab the mouse; skip world rendering (GUI still draws; resets each launch) |
writeMapsAsImages | Saves every map the client knows as a PNG in config/tweakeroo/map_images/<world>/ |
Auto elytra & rockets
tweakAutoSwitchElytra: equips your best elytra and, on landing, your previous chest armour. It triggers on a fresh Jump press while airborne (a ground jump does nothing).- Landing quirk: if the remembered chestplate is gone, it equips the best chestplate you own (armour, toughness, Protection), not necessarily the one you wore.
tweakAutoSwitchRockets: pulls the best rocket stack (longest flight) intoutilityHandSlot; explosive rockets excluded unlessrocketSwapAllowExplosions.swapElytraChestplateis a manual swap between elytra and chestplate.utilityHandSlot(any / main_hand / off_hand) only affects rockets and the spyglass — not food, whatever older text says.
Previews & Data Sync
| Tweak | Shows | Works on Realms / vanilla servers? |
|---|---|---|
tweakShulkerBoxDisplay | Contents of any item with a container component (shulkers, and other chest-like items) in an inventory tooltip. Needs SHIFT unless shulkerDisplayRequireShift is off. Background tinted by dye colour | ✓ Yes (item data only) |
shulkerDisplayEnderChest | Your ender chest contents when hovering an ender chest item (from synced data, then chest cache, then a fallback that is empty without sync) | Partly — needs sync or a cached view |
tweakBundleDisplay | Bundle contents with SHIFT. Turning bundleDisplayRequireShift off suppresses the vanilla bundle tooltip entirely | ✓ Yes |
tweakMapPreview | Map preview with SHIFT (mapPreviewSize, default 160) | ✓ Yes |
tweakInventoryPreview + inventoryPreview | Contents of the chest / barrel / furnace / villager / horse / player under your crosshair while the key is held. Needs line of sight. The tooltip calls it deprecated in favour of MiniHUD’s version | Only with sync (below) or in single player |
tweakPlayerInventoryPeek + playerInventoryPeek | Your own 27 main-inventory slots under the crosshair while held (mine X9) | ✓ Yes |
Server data sync
To read a chest or entity you have not opened, on a non-integrated server, Tweakeroo needs the data sent to it:
- Single player: reads the integrated server directly — nothing to configure.
entityDataSync(Servux): requires the Servux server mod with a matching version.entityDataSyncBackup: uses vanilla NBT query packets; only works if the server lets you query (operator status) and is only attempted for a limited time after login.- Without either on a remote server, chest/shulker-block/ender previews are empty or stale; the item tooltip previews above still work.
inventoryPreviewToggleScreenopens the preview as a real screen with hover tooltips (its villager-colour option is ignored).
Disable (“Yeets”) Toggles
50 toggles that turn a vanilla behaviour off. All are off by default with no hotkey. Grouped by what they touch:
| Family | Toggles | Notes |
|---|---|---|
| Fog & sky | disableAllTerrainFog, AtmosphericFog, RenderDistanceFog, BossFog, SkyDarkness | Sodium: disableAllTerrainFog is excluded when Sodium is installed. Shader packs (Iris) likely override the rest (unverified) |
| HUD & overlays | FireOverlay, FreezeOverlay, NauseaEffect, BossBar, ScoreboardRendering, StatusEffectHud, InventoryEffectRendering, ItemSwitchRenderCooldown, OffhandRendering, WorldViewBob | Iris: disableWorldViewBob is excluded when Iris is installed |
| Particles, weather, sound | Particles, BlockBreakingParticles, FirstPersonEffectParticles, RainEffects, NetherPortalSound | disableNetherPortalSound looks inverted in the source (unverified at runtime) |
| Entity / block rendering | EntityRendering, ArmorStandRendering, FallingBlockEntityRendering, DeadMobRendering, MobSpawnerMobRendering, TileEntityRendering, BeaconBeamRendering, RenderingScaffolding | For lag-fixing and screenshots |
| Engine — dangerous | ChunkRendering, ClientLightUpdates, ClientBlockEvents, ClientEntityUpdates, EntityTicking, TileEntityTicking, ConstantChunkSaving, TickRatePlayerSlowdown | Careful. Block changes stay invisible until you turn ChunkRendering off and press F3+A. EntityTicking/TileEntityTicking also freeze the integrated server (mobs, hoppers, furnaces) in single player |
| Gameplay conveniences | BlockBreakCooldown, DoubleTapSprint, WallUnsprint, AxeStripping, ShovelPathing, SignGui, PortalGuiClosing, SlimeBlockSlowdown, DeadMobTargeting, Observer, BatSpawning, VillagerTradeLocking | disableObserver stops observers firing (breaks redstone in single player). disableSignGui with Sign Copy off means you can never edit a sign |
| UI | ShulkerBoxTooltip, CreativeMenuInfestedBlocks | — |
TweakFork Extras
A few tweaks come from Andrew54757’s “TweakFork”, merged into the 26.x line.
- Area Selector (
tweakAreaSelector): look at a block; LEFT CLICK sets pos 1 (red), RIGHT CLICK sets pos 2 (blue). HoldareaSelectionOffset(mine LEFT_SHIFT) to select the block beside the face. While on, normal attack/use/place is cancelled entirely. In-memory only.areaSelectionAddToList/…RemoveFromList(unbound) add the box’s non-air blocks to the list chosen byselectiveBlocksListType. - Selective Blocks Rendering (
tweakSelectiveBlocksRendering): a blacklist hides listed positions; a whitelist shows only listed positions (an empty whitelist hides everything). The blocks are actually swapped out of the client world, so they’re also untargetable and your client collision no longer sees them (rubber-banding likely, unverified). Lists are absolute coordinatesx,y,z|x,y,z, stored globally.tweakSelectiveBlocksRenderOutlinedraws green (whitelist) / red (blacklist) outlines.selectiveBlocksNoHitis never read — no effect. - Scaffold Place and Zoom are covered above.
Servers & Realms
Everything is client-side code. On vanilla servers and Realms nothing is sent that a normal client would not send — except the placement-protocol click values and any reach values you choose. Some servers’ anti-cheat may dislike fast placement, hand restock’s rapid slot clicks, or flexible placement’s extra look packets.
| Category | Tweaks |
|---|---|
| Fine anywhere | Free camera, zoom, snap/aim lock, elytra camera, gamma, fog/render disables, chat tweaks, presets, shulker/bundle/map tooltips, tool/weapon switch, periodic clicks, hand restock, hotbar scroll/swap |
| Needs server help | Block rotation for non-face-based blocks (Servux/Carpet); chest/entity/ender previews (Servux or op-level NBT query); tweakEmptyShulkerBoxesStack (SP or a server mod that matches) |
| Single player only | tweakFillCloneLimit, tweakSculkPulseLength, tweakStructureBlockLimit, reach overrides (partly), disableBatSpawning, disableEntityTicking, disableTileEntityTicking, disableObserver, disableVillagerTradeLocking. Shown in gold in the GUI |
With Sodium and Iris installed, a few options are compiled out (see the Yeets table). The startup log prints “Disabled mixin … due to” for each.
My Hotkey Reference
These are my personal keybindings, not defaults. Everything with the X prefix is a chord — hold X, tap the second key — and works only in-game with no other key held. Tweakeroo’s defaults use Z for placement restrictions; I consolidated everything under X in June 2026.
Config & GUIs
| Hotkey | Action |
|---|---|
| X C | Open config GUI |
| X P | Open camera preset editor |
| X 9 | Peek player inventory (hold) |
Toggles
| Hotkey | Tweak | Notes |
|---|---|---|
| X G | Fast block placement | Also toggles the placement restriction (tied) |
| X R | Hand restock | |
| X U | Periodic hold use | Auto-eat |
| X Y | Periodic use | Simple auto-clicker (interval 10 = 0.5 s); cannot eat |
| X PERIOD | Periodic attack | Interval 20 |
| X K | Fake sneaking | |
| X N | Permanent sneak | |
| X H | Hotbar scroll | Its hotbarScroll key is unbound |
| X Z | Hotbar slot randomizer | Fires on release; hold + scroll = max slot |
| X B | Breaking grid | Fires on release; hold + scroll = grid size |
| X E | Elytra camera | Needs the elytraCamera key too (unbound) |
Placement restriction modes
| Hotkey | Mode |
|---|---|
| X 1 | Plane |
| X 2 | Face |
| X 3 | Column |
| X 4 | Line |
| X 5 | Diagonal |
| X 6 | Layer |
Hold modifiers
| Key | Action |
|---|---|
| LEFT_CONTROL | Flexible placement offset |
| LEFT_ALT | Flexible placement rotation and inventory preview |
| LEFT_SHIFT | Area selection offset |
Overlaps and gaps in my current setup
LEFT_ALT is bound to both flexible rotation and inventory preview (the GUI shows overlapping hotkeys in gold). Because both are “allow extra keys” hold-keys they don’t block each other, but holding Alt activates both. Also, on macOS CTRL+click is a right-click in vanilla, which may interfere with LEFT_CONTROL as a hold key (not verified in the source).
Bound in the config but currently doing nothing
tweakElytraCameratoggle is bound, butelytraCamerais not.tweakHotbarScrolltoggle is bound, buthotbarScrollis not.tweakAccurateBlockPlacementis on, but neither accurate hotkey is bound.tweakFlexibleBlockPlacementis off, so Alt/Ctrl placement keys do nothing.inventoryPreviewis bound buttweakInventoryPreviewis off.
My Config Snapshot
Instance 26.3, Tweakeroo 0.30.0 with Sodium and Iris. Settings that differ from the defaults, and what is currently enabled.
Currently enabled tweaks
tweakFastBlockPlacement, tweakPlacementRestriction (mode plane), tweakHandRestock, tweakAccurateBlockPlacement, tweakShulkerBoxDisplay. No Yeets are on.
Notable settings
| Setting | Value | Default |
|---|---|---|
periodicHoldUseDuration / Interval | 40 / 40 | 20 / 20 |
periodicUseInterval | 10 | 20 |
periodicAttackInterval | 20 | 20 |
fastBlockPlacementCount | 2 | 2 |
placementRestrictionMode | plane | face |
breakingRestrictionMode | line | line |
handRestockPreThreshold | 6 | 6 |
shulkerDisplayEnderChest | on | off |
toolSwapBambooUsesSwordFirst, NeedsShearsFirst, SilkTouchFirst, PreferSilkTouch | on | on |
stackableShulkersInHopperFix | on | — |
Lists
- Block-break blacklist:
minecraft:budding_amethyst. Attack blacklist:minecraft:villager. - Fast-placement blacklist: ender chest, white shulker box. Fast-right-click block blacklist: chest, ender chest, trapped chest, white shulker box (item list type none, whitelist has buckets/bottle).
- Hand-restock blacklist: bucket, lava bucket, water bucket (list type none, so inactive).
- Weapon mapping: default = mace + all swords; end crystals, item frames, glow item frames and leash knots = ignore; minecarts and boats = mace + all axes. (Remember: the mace is never selected, and
<ignore>does not block a switch.) - Potion warning: blacklist of harmful effects and whitelist of fire resistance / invisibility / water breathing (list type none).
- Unstacking protection: bucket, glass bottle. Repair-mode slots: main hand, off hand.
What the Tooltips Get Wrong
Where in-game text and older guides disagree with what 0.30.0’s code actually does:
| Says | Reality |
|---|---|
| Periodic hold: interval = ticks between starting to hold | Interval is the pause after release; cycle = Interval + Duration |
| Hold the toggle key and scroll to adjust periodic timings | Not implemented in 0.30.0 (code commented out). Edit Generic. Scrolling is live for 9 other toggles |
| Fast placement / fast click counts are “per game tick” | Per rendered frame |
| Fast placement just works | Needs a restriction or grid on (hence “tied to fast”) |
| Swap almost-broken tools at 5% for low-durability items | 8% of max durability for items ≤ 100 |
<ignore> in weapon mapping prevents a switch | Only means “nothing preferred”; a switch can still happen. The mace can never be selected |
slabs_only vs none protocol modes | Identical in code. The bool decides whether the client sends the encoded value |
| Accurate placement keys draw an overlay | They draw none; only flexible placement does |
restrictionLayerHeight is scroll-adjustable | No handler — set in the config screen |
Fly deceleration uses flyDecelerationRampValue | The option is flyDecelerationFactor; camera deceleration is fixed at ×0.4 |
utilityHandSlot is for food/rockets/spyglass | Rockets and spyglass only |
| DeepWiki: flexible keys are R / O / B, restriction modes have no default keys | Defaults are LEFT_ALT (rotation), LEFT_CONTROL (offset), unbound (adjacent); restriction modes default to Z,1–6 |
zoomResetFovOnActivate | Only works while zoomAdjustMouseSensitivity is on |
Options that exist in the config file but have no code (0.30.0)
These appear in the language file or older configs but do nothing: tweakCreativeExtraItems, tweakCustomFlatPresets (+ their lists), tweakMatchingSkyFog, tweakServerDataSync / …Backup and serverDataSyncCache* (now Generic entityDataSync*), disableNetherFog, skipAllRendering, elytraFix, elytraSprintCancel, periodic*ResetIntervalOnActivate, translationTryBaseLanguage, and selectiveBlocksNoHit (parsed but never read).
Recipes & Pro Tips
Auto-eat while AFK
Periodic Hold Use, Duration 36 (SP) or meal + ping + 2, Interval ~100, food in main hand, Hand Restock on with spare identical stacks. Don’t open screens; keep attack un-held.
Build a straight wall fast
Fast placement on, Plane mode (X1), place the first block, then sweep. To go unrestricted: Placement Grid at size 1.
Pistons & observers
Enable Flexible placement, hold Alt, click the centre of the face you want it to point out of. Single player or a Servux/Carpet server for full rotations.
Strip-mining shafts
Breaking Restriction in Column mode, first block start-of-shaft, plus Tool Switch — it picks the pickaxe/shovel for you.
Remote farm view
Preset over the machine, then Free Camera + Player Inputs + Player Movement to keep watching while you walk.
Copy many signs
Write one sign, turn Sign Copy on, then Disable Sign GUI on — every sign you place is a copy without opening a screen.
Straight elytra flying with a look-around
Bind elytraCamera (e.g. hold a mouse button), enable tweakElytraCamera, hold to look down without changing course.
Find out what is bound to a key
Type the key into the config screen’s search bar — it searches by hotkey.
Server hopping
Bind toggleAccuratePlacementProtocol: leave it on for single player/Servux, off on vanilla servers and Realms to avoid ghost blocks.
When something “does nothing”, check in this order
(1) Is the tweak on? (2) Does it need a separate hold-key bound and held? (3) Is a screen open or another key held (chord rules)? (4) Does it need a restriction/grid (fast placement) or a protocol the server lacks (rotation)? (5) Is a list type set to none (lists inactive) or an empty whitelist (blocks everything)? (6) Did you edit the JSON while in a world (overwritten on quit)?
Sources
- Source code: sakura-ryoko/tweakeroo, branch 26.3 (0.30.0) and sakura-ryoko/malilib, branch 26.3 — every behaviour statement in this guide was read from these. The vanilla eat-time and hand-order facts were checked in the decompiled 26.3 client.
- The only official written how-to: maruohon’s gist “Block rotations and offsets in Tweakeroo” — Flexible/Accurate placement and server requirements (its option name
carpetAccuratePlacementProtocolis nowaccuratePlacementProtocolin Generic). - In-game text: the mod’s
en_us.jsontooltips — the most complete per-option description, but terse and sometimes stale (see above). - Modrinth page: modrinth.com/mod/tweakeroo — feature list and the anti-cheat warning.
- Not recommended: DeepWiki’s auto-generated pages (older snapshot with wrong defaults), and unofficial tweakeroo.com.
Verified against source 2026-09-24 (commit 7bad693). Behaviour may differ on other Minecraft versions. A few items were derived from code reading without an in-game test and are marked (unverified).