- This is a rewrite of the original UI-Utils 2.4.0, migrated to Mojang mappings (mojmap) which was ported out of Wurst-7-CevAPI and then bumped to Minecraft 26.x and put into a standalone mod.
- On top of classic UI-Utils quality-of-life features, this build adds advanced packet tooling, command scanning, macros, auto-duping and expanded UI controls.
- This application is designed and presented for people already familiar with UI-Utils. There will be no explanations or guide on how to use it in-game, you can instead find that here.
- If you are looking for a 1.21.11 version you can find that here but it will not have the majority of features in this project.
Build with Gradle (Java 25+):
./gradlew clean buildArtifacts land in build/libs/.
The artifact version comes from mod_version and release_version in gradle.properties.
The default build targets Minecraft 26.1, the oldest supported release, so compilation catches accidental use of newer-only APIs. The resulting jar is designed to run across Minecraft 26.1 through 26.3; runtime shims cover API changes introduced in later supported 26.x releases.
To compile specifically against Minecraft 26.3, override the versions at build time:
./gradlew build -Pminecraft_version=26.3 -Pfabric_version=0.160.6+26.3 -Ploader_version=0.19.5The macro file picker runs inside Minecraft and needs no optional native dialog library. New macro bindings store key names so they survive the GLFW-to-SDL change in 26.3; older macros containing only numeric bindings may need rebinding when moved between input systems.
- Install Fabric Loader and Fabric API for your Minecraft
26.1–26.3installation. - Drop the built jar from
build/libs/into yourmods/folder. - Launch Minecraft. Open any container — the UI‑Utils toolbox appears on the left.
- On launch the mod checks the GitHub releases for a newer version
- Runs on a background thread with a 5 second timeout, so a slow or offline network never delays the game
- If an update exists it is announced once per game launch with a clickable link to the release page; it is not repeated when you change servers or worlds
- Close GUI without sending a packet
- De‑sync tricks (close packet only)
- Send/Delay queue for UI packets, with flush on demand
- Disconnect & send (flushes every queued GUI packet, then disconnects)
- Its own draggable in-game panel (drag by the grip in the panel's top-right corner)
- Appears on container and inventory screens only (chests, plugin GUIs, player inventory, creative inventory); chat, the pause menu, options, level loading during a portal transition and other mods' screens never host it
- Defaults to the right of the container and stacks below the fabrication panel when both are open
- Save / Load / Clear GUI Cache so a stored screen never lingers after it is stale
- Tracks the saved
Screen, itsScreenHandler, the GUI name, sync ID and revision - Reports whether the saved GUI is still LIVE (server-backed) or has become STALE (clientside-only) after the server closed the window
- Shows the same LIVE / CLIENT-ONLY state for the currently open GUI right next to the fabrication tools
Copy GUI JSONserializes the whole GUI (title components, syncId, revision, saved-GUI state, cursor and every occupied slot with item id, count and full data-component/NBT representation) as pretty JSON to the clipboardCopy Title JSONkeeps the old title-only behaviourStealmoves the container contents into your inventory,Storemoves your inventory into the container,Dumpthrows the container contents on the ground- Transfers are queued at a configurable delay (default 100 ms) instead of firing every click at once, so servers do not reject or throttle them
- Open from the UI‑Utils overlay (
GUI Tools) or via.uiutils gui tools
- Small vanilla-styled buttons (44x12) shown centred above any open container GUI, so they match the active resource pack
- Gated by the Steal/Store/Dump buttons option in Settings
Stealquick-moves every container slot into your inventoryStorequick-moves your inventory into the containerDumpthrows the container contents on the ground- Transfers run as a queue at the configurable transfer delay (adjustable in GUI Tools)
- Hidden in the player inventory and the creative inventory
- Focused logger for container traffic only, normalized to one row format:
timestamp | direction | packet | syncId | revision | slot | button | action | cursor/item - Covers
ClickSlot,ButtonClick,CloseScreen,CreativeSlot,SetSlot,SetContent,SetData,Cursor,OpenScreenandCloseScreen - Bounded in-memory ring buffer plus an optional
config/packet-logger/gui-<timestamp>.logfile (batched writes, flushed from the client tick) - Scrollable viewer that scales its width with the window size so the long rows stay readable
- Open from GUI Tools, from the overlay (
GUI Packet Log) or via.uiutils guilog open
- Replaces the old all-or-nothing handling for GUI packets with a rule per packet class
- Rules: Allow / Drop / Delay, each packet coloured by its state
- Covers
Click Slot,Button Click,Close Screen,Creative Slot,Slot State,Held Slot,Place Recipe,Select Trade,Set Beacon,Sign Update,Recipe BookandRecipe Seen - Delay is tick based and shared with the existing queue, so
Clear Queue,Spam,Send One,Pop LastandDisconnect & Send Packetsall work with it - Rules persist in
ui-utils.json - Open from GUI Tools or via
.uiutils guipackets screen
- Its own titled, draggable in-game panel (drag by the grip in the panel's top-right corner)
- Appears on container and inventory screens only, same as GUI Tools
- Toggling it from anywhere else is remembered and the panel shows as soon as a container or the inventory is open
- Header shows the GUI name, live
syncId/revisionand LIVE / CLIENT-ONLY state, plus the saved-GUI status - Action dropdown for
PICKUP,QUICK_MOVE,SWAP,CLONE,THROW,QUICK_CRAFT,PICKUP_ALLinstead of cycling blindly - Captured default sync ID / revision, editable per send
- Repeat count per send plus a delay toggle
- Validation and status feedback (out-of-range slots, non-numeric fields, send summaries) under the send button
- Quick
Steal/Dump/Copy JSONbuttons for the open container - Timed Spam mode: send a chosen slot click
Ntimes with a configurable millisecond interval for race / desync testing (for exampleslot 5, 40 clicks, 50 ms apart), with live progress - The overlay widgets are re-created on resize, so the fabricator no longer goes missing after a window resize
- The Server Intel screen has separate command, plugin, and legacy scan controls, a scanner-speed setting, and live status for scans and command-suggestion probing.
- Passively caches joined-server packet evidence (configuration, known packs, payload channels, registries, dimensions, advancements, tab/scoreboard text, and chat-completion metadata) per connected server. Server-list/status traffic is excluded.
- Command scans offer two modes:
- Packet probes command suggestions and can discover roots beyond the immediately visible command list.
- Client recursively enumerates paths from a separate copy of the server-supplied Brigadier tree, including literal subcommands, argument paths, and redirect/alias branches, without sending probe packets. It excludes client-only commands registered by local mods, even though those appear in Minecraft's combined command completion list.
- Vanilla/default commands are hidden from results by default. Use Show vanilla commands to include them; this does not add client-only commands.
- Plugin identification uses command suggestions and does not run discovered commands or issue
/helpcommands. Command roots remain in the command list; plugin names are shown only when there is supporting evidence. Known command aliases and product names are heuristic hints, not a filter, so unfamiliar roots remain discoverable and unattributed when ownership is unknown. - Optional
/verversion queries can check discovered plugin names; an optional dictionary fallback fills unused queries, with up to 12 queries total. These queries are sent as command packets and replies appear in chat. - Packet-discovered roots that are absent from the current player's synced command tree are highlighted red: they are permission-hidden for that player and should not be assumed executable.
- Discovered command rows are clickable. Selecting one fills the packet-command field; execution still requires the explicit Send packet cmds button.
- After a manual packet-command send, a temporary output panel records the sent command and system command responses. It does not capture player chat.
- Supports packet execution of selected/manual commands, optional execution of discovered commands, and
triggervalue discovery (logged astrigger (value)). - Plugin results merge packet evidence, known packs, custom payloads, command-tree roots, plugin-list evidence, and root hints. Expand plugin rows for associated commands and cached server evidence.
- A Verbose Server Scan combines the current server fingerprint with plugin and command scans, starting missing scans for the current server when needed. Its report is scrollable and copyable.
- Completed plugin, command, and verbose scans are stored as compact per-server JSON history under
<gameDir>/config/ui-utils-scan-history/. Each scan overwrites its latest snapshot and records only added, removed, changed, or unchanged findings to avoid unbounded duplicate logs. - Plugin vulnerability checks use bundled DupeDB exploit data, including affected plugin versions and finding details/links. In Settings, enter a DupeDB API key to enable database updates at launch or on demand.
- Check current server IP optionally sends the joined server address to DupeDB to look up exploit reports, including submissions and verified sightings. Matching reports are cached locally and remain available offline. Server-IP checks require DupeDB updates to be enabled and can be started or stopped from Settings or Server Intel.
- Packet command probes retry unanswered requests and report prefixes that remain unanswered or hit suggestion limits. Scans stop active probing when the server suppresses command-suggestion responses.
- Opens from the UI-Utils overlay, the container tools' Open NBT button, or
.uiutils nbt. - Syntax-highlighted SNBT editor with validation feedback and error locations; accepts item data as SNBT or JSON.
- Read targets: held item, looked-at block, looked-at entity, or open container. Container NBT is read-only and can be copied from the editor.
- Apply / Give writes edited item data to the selected hotbar slot in Creative mode. Applying block or entity data sends a
/data mergecommand and requires enabling OP World Edit plus sufficient server permission. - Create new item data, save named presets, and manage saved presets. Includes built-in presets.
- Reads packets on server join to determine the current AntiCheat, if any.
- Disable/Enable in settings.
Ideas From FrannnnDev's fork of UI-Utils
- Leave & send, Disconnect & send, Save/Load GUI, Clear Queue, Queue, Resync Inv, Disconnect, Spam +/-, Send One, Pop Last
- Queue helper and counter
.uiutilscommands- Named GUI slot maps
- Lets you manage packet behavior per packet type (S2C & C2S)
- Supports 3 independent modes: Log, Deny and Delay
- Modes can overlap (Log & Deny Packet A but also Log & Delay Packet B)
- Toggles for enabling modes as well as cycling through packet edit list
- Delay is tick based
- Searchable dual-list UI with select all/none controls
- Runs entirely in-game, with the full control set on one screen (modes, output, packet selection and delay)
- Optional
Show Unknown Packetsfeature to allowclass_####packets - Verbose mode dumps monitored packets with full per-field detail, including recursively expanded packet bundles
- Detailed decoding for item stacks and their data components, block states, registries and data values where available
- Decode coverage tracking reports which packet types are fully decoded, partially decoded or reflection-only
- Entity lifecycle tracking correlates spawn, motion, teleport, metadata, equipment and removal packets
- Batched log writes with a configurable flush interval, written as JSONL alongside an optional human-readable log
- Enabling logging reports the monitored type counts and log location to chat
- Inspired by HelixCraft's Packet Logger
- Open from the UI‑Utils overlay, by keybind (configurable in Settings) or via
.uiutils apt
- A macro is a named automation script made of ordered steps (actions and wait conditions).
- The Macro Library provides Create New, Edit Selected, Delete Selected, Run Selected and Stop, plus import/export fields.
- Macros can be saved, edited, duplicated, reordered, deleted, exported and imported.
- Actions include
SEND_CHATandSEND_COMMAND; a leading/inSEND_CHATis routed as a command. - The macro editor supports:
- Add Action and Add Conditional pickers
- Per-step controls: move up/down, duplicate, edit, delete
- Scrollable step list with draggable scrollbar
- Undo/redo for editor changes
- Loop toggle, plus Once (temporary) and Run (saved macro)
- Optional keybind assignment per macro
- The step options screen supports:
- Context-aware fields per action type
- Compact layout for simple actions
- Multi-value list fields (comma-separated input + Add/Clear)
- No empty editor for actions with no configurable options (for example
STOP_MACRO)
- Runtime behavior:
- Macros execute steps in order
WAIT_*conditions pause progression until matched (or timeout depending on the condition)STOP_MACROterminates execution immediately
- Import/export:
- Import reads
.nbtmacro files - Export accepts a folder path and writes
<macro-name>.nbt - Native pickers are available from
...buttons - Default directories are auto-created:
<gameDir>/config/ui-utils/macro_import<gameDir>/config/ui-utils/macro_export
- Import reads
- Uses a strategy matrix built from 218+ different methodologies inspired by DupeDB
- Accepts a plugin GUI open command plus an optional prepare command, so it can work with plugin inventory GUIs such as
/pv 1,/ec,/ah, or/shop - Player-inventory target slots are treated as seed items for plugin GUI lifecycles, not as a vanilla inventory dupe scan
- Per-category toggles let you narrow the run instead of running everything:
- Movement methods
- Close methods
- Reopen methods
- Packet-delay variants
- Validation
- Start from the main UI-Utils overlay or from the Autoduper options screen while a container is open
- Includes exact attempt replay, a visible abort overlay and a hold-to-abort key
- Success messages report the exact attempt number for easy replay
- Verbose mode toggle to find niche dupes even when similar attempts failed
- Tri‑state Slot Overlay: OFF / HOVER / ALWAYS
- Unified HSV color picker with target selector:
- Button background color
- Button text color
- Overlay number color
- Packet HUD text color
- Overlay alpha and XY offsets
- Resource-pack bypass and force-deny options, plus an optional registry-sync workaround
- When “Show resource pack buttons” is enabled, these three options also appear as checkboxes near the bottom-left of the Multiplayer screen
- The bypass accepts required server-pack requests and reports them as loaded without downloading or applying the pack. Force deny instead declines intercepted requests; it only takes effect while the bypass option is enabled.
- Ignore registry sync filters unknown entries before Fabric remaps the server registry data. Unknown mob effects get inert placeholders to help preserve raw-ID alignment; other unknown registry data is left unsynced and reported in the log.
- Close Delay and Command Delay sliders (tick based)
- Dedicated Keybinds screen for rebinding UI-Utils actions
- Legacy direct key fields still present: restore GUI and delay toggle
- Disconnect method selector (used by UI‑Utils “Disconnect” buttons)
- Includes QUIT, packet-based kick styles and lag styles
- Includes TIMEOUT mode (KeepAlive wait + block + delayed action)
- In-game HUD rendering of packet flow.
- Format:
888 IN / 999 OUT20 QUEUED(only shown when queue > 0)
- HUD color is configurable in Settings
- Positionable to all four corners
- Colored button renderer is used across UI‑Utils screens and injected buttons
- Removes mixed vanilla/colored button look
[12:52:54]: Fabricate ClickSlot: syncId=6, revision=1, slot=2, button=0, action=PICKUP, times=1, diffSlots=1, carriedBefore=<empty>, carriedAfter=class_10939[item=Reference{ResourceKey[minecraft:item / minecraft:oak_slab]=minecraft:oak_slab}, count=11, components=class_10936[addedComponents={}, removedComponents=[]]]
[12:52:54]: Fabricate ClickSlot: menu.containerId=6, syncIdMatch=true, diffDetail=[2: minecraft:oak_slabx11 -> empty]
[12:52:54]: UiUtilsConnectionMixin: attempting to send UI packet class_2813 (sendUiPackets=true, delayUiPackets=false)
Supported roots:
.uiutilsuiutils
Main commands:
helpenable/disableclosedesyncapt(aliases:advancedpacketscanner,advancedpackettool)chat <message>screen <save|load|list|info> [slot]pluginscommandsqueue <list|clear|sendone|poplast|spam [times]>packethud <on|off|toggle>delay <on|off|toggle>closedelay <ticks>commanddelay <ticks>(alias:cmddelay)sendpackets <on|off|toggle>disconnectmethod <list|current|METHOD>timeout <seconds>lagmethod <list|current|METHOD>settingsautoduper <open|start|stop|status|slot|command|attempt|hybrid [openCommand]>gui <status|save|saveclose|load|clear|copy|steal|dump|tools>guilog <on|off|toggle|file|clear|copy|open>guipackets <list|cycle <id>|reset|delay <ticks>|screen>
Open Macros from the overlay to use the Macro Library.
Workflow:
- Create or edit a macro, then save it.
- To export, select the macro and choose an export folder (
...opens folder picker). - To import, choose a
.nbtfile (...opens file picker) and import it.
Path behavior:
- Import field points to:
<gameDir>/config/ui-utils/macro_import - Export field points to:
<gameDir>/config/ui-utils/macro_export - Both folders are created automatically if they do not exist.
- Store Item: choose
STORE, open a container, and putgunpowderorminecraft:gunpowderin Target Items. Commas, semicolons, and newlines separate targets;#slot|itemrestricts a target to an open-menu slot.LOOTtransfers in the opposite direction. All Items bypasses the target filter. - Packet Control: choose C2S (outgoing) or S2C (incoming), then Browse / search packets and select one or more packet names.
DELAYholds matching packets for the chosen number of ticks (20 ticks = one second);DENYdrops them;ALLOWremoves the selected macro rules. Packet Tools and GUI packet settings still apply. - Rule duration is in milliseconds, independently of the per-packet delay.
0keeps rules until Stop, another macro starts, or disconnect. Timed rules can outlive a completed macro. These rules are temporary and do not change saved Packet Tools settings. Packets already delayed retain their release time after rules are removed. - Flush Packets releases queued incoming, outgoing, or both directions immediately; outgoing also includes the UI packet queue. Stale packets from previous connections are discarded. Outgoing protocol-transition packets are sent immediately after flushing the outgoing queue.
- Lists can be edited directly and saved without pressing Add. Edits survive changing toggles, modes, and resizing the editor; deleting a value removes it.
- Entire codebase uses Mojang mappings for clarity and forward‑compat.
- The default jar is compiled against 26.1 and includes runtime shims for API differences through 26.3. Minecraft 26.4 and later are not declared supported.
- Packet types are discovered at runtime with a reflective catalog for resilience across dot‑releases.
- APT is fully in-game: a custom dual-list widget backs the packet pickers, and the packet dumping engine is ported from Wurst7-CevAPI.
- Original concept: UI‑Utils (MrBreakNFix and contributors)
- Modernization + new features: CevAPI
- Advanced Packet Tool inspired by HelixCraft's Packet Logger
- Extra UI-Utils options inspired by FrannnnDev's fork
- Published with approval from MrBreakNFix
- DupeDB for plugin vulnerability data and its update API.
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE.
UI‑Utils is a debugging and testing toolkit. Be nice, follow server rules and local laws. You are responsible for how you use these tools.





