Hercule Documentation
Everything you need to configure, use, and understand Hercule. Browse modules by category, learn scripting, or find answers to common issues.
Quick Start
New to Hercule? Start small. Enable one module, understand what it does, then tune settings. Most issues come from enabling too many conflicting modules at once.
Open the GUI
Press Right Shift. Categories are grouped: Combat, Movement, Player, Visual, World, and Misc.
Enable one module
Click a module name to toggle it. Right-click or expand to see settings before stacking modules.
Save your setup
Most settings auto-save. Keep separate configs for legit play, mining, visuals, and testing.
UI, HUD, and Scaling
Hercule includes a ClickGUI, HUD editor, visual labels, and style controls. If the GUI looks too small, use the Settings tab to increase GUI scale.
ClickGUI Settings
Adjust GUI scale, category size, animation speed, rounded corners, theme color, blur, borders, and sorting.
HUD Editor
Drag labels and widgets. Select multiple elements with a box. Right-click for element properties.
Visual Modules
ESP, StorageESP, Nametags, Radar, Minimap, Trail, TargetHUD, ArmorHUD, Keystrokes, and texture controls.
Console
Commands, testing, logs, and faster control when you don't want to click through menus.
Module Index
Complete reference for all 130+ modules. Each card shows the module name, category, and a short description of what it does.
Combat
Modules for attacking, targeting, and PvP advantage.
Movement
Modules for flight, speed, traversal, and movement control.
Player
Modules for inventory, survival, interaction, and player utilities.
Visual
Modules for ESP, HUD elements, rendering, and visual information.
World
Modules for mining, building, pathfinding, and world interaction.
Misc
Modules for automation, anti-cheat bypass, social features, and utilities.
Baritone Guide
Baritone is Hercule's advanced pathfinding module. It can route, jump, bridge, tunnel, dig, avoid threats, render paths, and includes integrated safety and route recording.
Core concepts
Path Algorithmchooses the engine: A*, JPS, Theta*, Bidirectional, Fringe, HPA, or D* Lite.Allow Breaklets Baritone mine blocks when useful for routing.Smart Shortcutscompares breaking blocks vs walking around them.Fast Obsidian Toolprevents bad obsidian routes unless your tool is sufficient.AutoEscaperoutes to safety when dangerous conditions are detected.SmartRouterecords a path you walk and replays it through Baritone.Path Debug HUDshows route state, target, stuck counter, and latest log.
| Feature | Use it when | Beginner setting |
|---|---|---|
AutoEscape | You want Baritone to run to safety on low health, fire, lava, or void fall. | Enable, cooldown ~80 ticks. |
SmartRoute | You want to record and replay a farm, base, or mining route. | Record with 1.5 spacing, simplify before replay. |
Path Debug HUD | You are tuning pathfinding or diagnosing why Baritone stopped. | Enable compact mode if screen is crowded. |
Avoid Slow Blocks | You don't want routes through obsidian-like blocks. | Keep enabled. |
Builder System
The Builder module lets you save structures from the world, load them from files, and automatically rebuild them block by piece. It supports full structure analysis, block counting, and incremental building with Baritone integration.
What you can do
Savea region of the world into a Builder structure file on disk.Loada schematic and preview it in the world before building.Buildthe structure automatically, placing blocks from your inventory.Analyzea loaded schematic to get a full block count and material list.AutoCollectintegration with Baritone to gather missing materials before building.
| Setting | What it controls | Recommended |
|---|---|---|
Build Speed | Blocks placed per tick. Higher is faster but more detectable. | 2-4 for legit, 8+ for fast building. |
Place Range | How far the builder can reach to place blocks. | Keep at 4-5 for reliability. |
Auto Rotate | Rotates the schematic to face your current direction. | Enable for directional builds. |
Layer Mode | Builds one Y-layer at a time instead of nearest block. | Enable for flat or layered structures. |
Skip Air | Skips air blocks in the schematic, only placing solid blocks. | Always enable to save time. |
Block Sort | Order blocks are placed: nearest, random, or layer-first. | Nearest for most builds. |
Workflow: save and rebuild a base
- Stand at one corner of your build. Use
.builder pos1to set the first corner. - Move to the opposite corner. Use
.builder pos2to set the second corner. - Run
.builder save mybaseto save the region to a file. - Later, run
.builder load mybaseto load and preview it. - Enable the Builder module and it will start building from your inventory blocks.
- Use
.builder analyzeto see exactly what materials you need.
Packet System
Understanding how Hercule handles network packets is key to advanced scripting and module behavior. Bedrock Edition communicates with servers using packets — structured binary messages for movement, actions, inventory, and more.
How packets work in Hercule
- Every player action (move, attack, place, interact) sends a packet to the server.
- Hercule intercepts both outgoing (client-to-server) and incoming (server-to-client) packets.
- Modules like Criticals, Velocity, Blink, and Disabler work by modifying, blocking, or injecting packets.
- Lua scripts can hook into packets via
on_packet_sendandon_packet_receive.
| Packet | ID | Purpose |
|---|---|---|
PlayerAuthInput | 144 | Contains position, rotation, input flags, and tick data. Sent every tick. |
InventoryTransaction | — | Handles item use, block place, attack, and equipment changes. |
Text | — | Chat messages sent by the player. |
MovePlayer | — | Server telling the client where to teleport. |
LevelSoundEvent | — | Sound effects triggered by game events. |
packet.create(id) to make a blank packet, packet.copy(dst, src) to clone one, and client.sendPacket(pkt) to send it. The auth.* helpers let you read and write PlayerAuthInput fields safely.
Criticals
Sends fake jump-position packets on each hit so the server registers critical damage without actually jumping.
Velocity
Modifies or cancels incoming knockback packets to reduce or eliminate knockback taken.
Blink
Queues all outgoing movement packets and releases them in a burst when disabled.
Disabler
Sends crafted packets to confuse server-side anti-cheat detection systems.
Config System
Hercule stores all module settings, keybinds, and HUD positions in configuration files. Understanding the config system lets you back up setups, share them, and switch between playstyles quickly.
How configs work
- Each config is a named preset that stores every module's enabled state, settings, and keybind.
- Configs are saved as files in the Hercule config directory.
- Settings auto-save when changed through ClickGUI, but explicit save/load is recommended for switching.
- HUD layout is stored separately and persists across config switches.
| Command | What it does | Example |
|---|---|---|
.config save <name> | Saves current state to a named config. | .config save pvp |
.config load <name> | Loads a saved config, applying all settings. | .config load mining |
.config list | Shows all saved config names. | .config list |
.config delete <name> | Removes a saved config file. | .config delete old |
.config reset | Resets all modules to default settings. | .config reset |
pvp for combat, mining for resource gathering, legit for undetected play, and visuals for recording or streaming. Switch between them with .config load.
Recommended config setups
- PvP: Killaura, Criticals, Velocity, AutoWeapon, Surround, Scaffold, NoSlow.
- Mining: Baritone, Xray, AutoMine, OreMiner, FastBreak, AutoTool, InventoryManager.
- Legit: AutoSprint, NoFall, FastEat, AutoTool, Fullbright, ArrayList.
- Visuals: ESP, StorageESP, NameTags, Radar, Minimap, Trail, Freecam.
Lua Scripting Basics
Lua scripts let you create custom modules without editing C++. Use a table, register it, then define lifecycle functions.
local MyModule = {}
function MyModule.on_enable(self)
client.notification("Hercule", "Module enabled", 2)
end
function MyModule.on_tick(self)
local x, y, z = player.getPos()
if module.get("My Module", "Debug") then
client.chat("Y = " .. tostring(math.floor(y)))
end
end
module.register("My Module", "Beginner friendly example", "Misc", MyModule)
module.addBool("My Module", "Debug", "Print position info", false)
Lua API Reference
Complete reference for the functions available to Lua scripts. All functions are crash-protected and sandboxed. Dangerous standard libraries (io, os, debug, package) are blocked.
_G, table, string, and math libraries are loaded. Entity and packet pointers are replaced with safe integer handles.
module — Module Registration & Settings
Registers a new Lua module in ClickGUI. name: unique string. desc: tooltip text. category: "Combat", "Movement", "Player", "Visual", "World", or "Misc". table: your module table with event callbacks.
Adds a boolean toggle setting. modName: module name. setName: setting name. setDesc: tooltip. default: true or false.
Adds a float slider setting. min/max: range. default: initial value. All numbers.
Adds a dropdown setting. options is a Lua table of strings. default may be an option index or option name.
Reads a setting value. Returns boolean for BoolSettings, number for SliderSettings, string for Combo settings, or 0 if not found.
Sets the keybind for a module. key: virtual key code (number) or key name string (e.g. "R", "F").
client — Chat, Input, Notifications
Displays a message in the in-game chat HUD. msg: string.
Shows a popup notification. duration: seconds (default 3.0). All parameters are strings except duration.
Returns the current UI screen name (e.g. "hud_screen", "inventory_screen"). Returns "" if none.
Checks if a key is held. key: "w", "a", "s", "d", "space", "shift", "ctrl", "lmb", "rmb". Returns boolean.
Sends a packet to the server. handle: integer from packet.create().
Queues a Minecraft command for next tick. cmd: string (e.g. "/tp @s 0 100 0").
Overrides GUI text at runtime. key is the original English text, tab label, module name, category, setting name, combo option, tooltip, or scoped key such as "Combat.Killaura.Range". value can be any UTF-8 language text. Passing nil removes that one override.
Bulk-loads GUI translations from a Lua table. Keys are matched globally first by original text, and more specifically by Category.Module.Text, Category.Text, or Module.Text while rendering a module. Save scripts as UTF-8 for Chinese, Arabic, Persian, Russian, and other non-Latin scripts.
Clears all GUI translations. If key is provided, only that original text key is cleared.
Returns the translated value for key, or the original key if no override exists. Useful for Lua-rendered custom UI text.
Returns the translated tooltip value for key, or the original key if no override exists.
Returns a Lua array of every known GUI translation entry from the live client: tabs, categories, module names, module tooltips, setting names, setting tooltips, checkbox names, slider names, combo names, and combo options. Each entry contains key, text, type, category, module, description, and optional options. Scoped keys use readable names such as "Combat.Killaura.Range".
Returns the same translation key dump as formatted text. By default it returns a ready-to-edit client.setTranslations({ ... }) template. Pass false to get plain key = text [type] lines for debugging or sharing.
Returns a Lua array containing only tooltip translation entries from the live client.
Returns tooltip translation keys as formatted text. Pass false for plain debug lines.
player — Position, Rotation, Combat
Returns x, y, z (eye position). Three return values.
Teleports the player to the given coordinates.
Sets the player's velocity vector directly.
Returns yaw, pitch. Two return values.
Sets the player's rotation. Note: arguments are (yaw, pitch).
Returns true if the player is standing on ground.
Plays the arm swing animation.
Attacks an entity. handle: entity handle from world.getEntities() or on_attack callback.
Alias for player.attack(handle).
Returns the selected hotbar slot (0-8).
Sets the selected hotbar slot. slot: integer 0-8.
world — Blocks, Entities, Raycasting
Returns the block name string at integer coordinates (e.g. "stone", "diamond_ore"). Returns "air" on failure.
Returns an array table. Each entry: {ptr, name, dist, pos={x,y,z}}. Excludes the local player.
Returns what you are looking at. Block hit: "block", x, y, z, face. Entity hit: "entity", handle. Nothing: "air".
Places a block at the target position. blockId selects a matching hotbar block; omit or use 0 for the current slot.
Breaks a block at integer coordinates. face is optional.
Alias for world.destroyBlock.
render — Custom Drawing (use in on_render)
Draws text on screen. Color RGBA: 0.0-1.0. size: font size (default 20).
Draws a filled rectangle. w/h: dimensions in pixels.
Draws a line between two screen points. thickness: default 1.0.
Returns width, height of the game window in pixels.
Converts 3D world position to 2D screen coordinates. Returns x, y or nil if off-screen.
packet — Packet Creation & Manipulation
Creates a new empty packet. id: PacketID integer (e.g. 0x90 for PlayerAuthInput). Returns handle (integer).
Returns the PacketID integer for a packet handle. Returns -1 if invalid.
Copies packet data from source to destination. Use to clone packets.
auth — PlayerAuthInput Helpers
0x90). All functions validate the packet type before modifying.
Reads position from an auth packet. Returns x, y, z.
Overwrites position in an auth packet.
Overwrites the movement delta/velocity field.
Sets rotation fields. Arguments: (handle, pitch, yaw).
Clears Up/Down input flags. Useful for movement manipulation.
Event Callbacks
Define these functions inside your module table. The engine calls them automatically.
| Callback | Arguments | Return | Description |
|---|---|---|---|
on_enable(self) | self (table) | void | Called when module is toggled ON. |
on_disable(self) | self (table) | void | Called when module is toggled OFF. |
on_tick(self) | self (table) | void | Called every game tick while enabled. |
on_render(self) | self (table) | void | Called every render frame. Use for custom drawing. |
on_packet_send(self, pkt) | self, handle | boolean | Packet about to send. Return true to cancel. |
on_packet_receive(self, pkt) | self, handle | boolean | Packet received. Return true to cancel. |
on_attack(self, target) | self, handle | boolean | Attack event. Return true to cancel. |
Useful Packet IDs
| Name | ID | Use Case |
|---|---|---|
TextPacket | 0x09 | Send chat messages |
MovePlayer | 0x13 | Player movement |
InventoryTransaction | 0x1E | Item use, transactions |
Interact | 0x21 | Entity interaction |
PlayerAction | 0x24 | Block breaking, actions |
Animate | 0x2C | Animations |
CommandRequest | 0x4D | Execute server commands |
PlayerAuthInput | 0x90 | Auth input manipulation |
Script Examples
Simple Fly
local Fly = {}
module.register("LuaFly", "Simple movement script", "Movement", Fly)
module.addSlider("LuaFly", "Speed", "Move speed", 0.1, 5.0, 1.5)
function Fly.on_disable(self)
player.setMotion(0, 0, 0)
end
function Fly.on_tick(self)
local speed = module.get("LuaFly", "Speed")
local yaw = player.getRot()
local rad = math.rad(yaw + 90)
local mx, mz = 0, 0
if client.isKeyDown("w") then
mx = math.cos(rad) * speed
mz = math.sin(rad) * speed
end
local my = 0
if client.isKeyDown("space") then my = speed end
if client.isKeyDown("shift") then my = -speed end
player.setMotion(mx, my, mz)
end
Block Warning
local BlockWarn = {}
function BlockWarn.on_tick(self)
local x, y, z = player.getPos()
local below = world.getBlock(math.floor(x), math.floor(y - 1), math.floor(z))
if below and string.find(below, "magma") then
client.notification("Warning", "You are standing on magma", 1.5)
end
end
module.register("BlockWarn", "Warns about dangerous blocks", "World", BlockWarn)
GUI Translation Pack
Translations are simple runtime overrides. Dump the live key list first so you can see exact scoped names like Combat.Killaura.Range, then save the script as UTF-8 and reload scripts.
local template = client.dumpTranslationKeysText()
print(template) -- copy from the Script console and replace values with your language
client.setTranslations({
["tab.Settings"] = "TRANSLATED_SETTINGS_TAB",
["Combat.Killaura.Range"] = "TRANSLATED_RANGE",
["Combat.Killaura.Range.tooltip"] = "TRANSLATED_RANGE_TOOLTIP",
["Combat"] = "مبارزه",
["Movement"] = "حرکت",
["Visual"] = "视觉",
["Console"] = "Консоль",
["Keybind"] = "键位",
["Press any key to bind, DEL/BACK to unbind, ESC to cancel."] =
"按任意键绑定,DEL/BACK 取消绑定,ESC 退出。"
})
local GuiLang = {}
module.register("GuiLang", "Loads custom GUI translations", "Misc", GuiLang)
Table Criticals (Advanced)
This example shows a complete combat script with packet caching, lifecycle cleanup, settings, and attack-triggered packet sends. Move once after enabling to cache a valid PlayerAuthInput packet.
local Criticals = {}
local PACKET_AUTH_INPUT = 144
local cached_packet_template = nil
local has_valid_cache = false
local function log(msg)
print("[TableCrit] " .. tostring(msg))
end
function Criticals.on_enable(self)
has_valid_cache = false
cached_packet_template = packet.create(PACKET_AUTH_INPUT)
log("Enabled.")
end
function Criticals.on_disable(self)
has_valid_cache = false
end
function Criticals.on_packet_send(self, pkt)
if packet.getId(pkt) == PACKET_AUTH_INPUT then
if cached_packet_template ~= nil then
packet.copy(cached_packet_template, pkt)
has_valid_cache = true
end
end
end
function Criticals.on_attack(self, target)
if not has_valid_cache or cached_packet_template == nil then
log("No cache. Move first!")
return
end
local count = module.get("LuaCrit", "Packet Count")
local x, y, z = auth.getPos(cached_packet_template)
local jump_pkt = packet.create(PACKET_AUTH_INPUT)
packet.copy(jump_pkt, cached_packet_template)
auth.setPos(jump_pkt, x, y + 1.0, z)
auth.clearVertical(jump_pkt)
client.sendPacket(jump_pkt)
local fall_y = y + 0.5
for i = 1, count do
local fall_pkt = packet.create(PACKET_AUTH_INPUT)
packet.copy(fall_pkt, cached_packet_template)
auth.setPos(fall_pkt, x, fall_y, z)
auth.clearVertical(fall_pkt)
client.sendPacket(fall_pkt)
end
log("Crit! (" .. count .. " packets)")
end
module.register("LuaCrit", "Criticals using Lua Table Structure", "Combat", Criticals)
module.addSlider("LuaCrit", "Packet Count", "Packets sent per hit", 1, 10, 6)
What this script demonstrates
on_enablecreates a reusable packet template and clears stale cache state.on_packet_sendrefreshes the template from real outgoing input packets.on_attackrefuses to run until a valid movement packet has been cached.module.addSliderexposes packet count in ClickGUI for quick tuning.
Command Reference
All 24 active commands. Use . prefix for client commands, # for Baritone commands. Type in chat or use the console (F6).
General
| Command | Aliases | Description | Usage |
|---|---|---|---|
.help | — | Lists all available commands. | .help |
.clear | cls | Clears the console display. | .clear |
.eject | — | Unloads the client from the game process. | .eject |
.coords | pos | Shows your current coordinates. | .coords |
.panic | — | Disables all active modules. Requires confirmation. | .panic then .panic confirm |
Module Control
| Command | Aliases | Description | Usage |
|---|---|---|---|
.toggle | tg, tog | Toggles a module on/off by name. | .toggle FullBright |
.bind | — | Assigns a keybind to a module. | .bind Killaura R |
.config | c | Save, load, delete, or list configs. | .config save mining |
Teleportation
| Command | Aliases | Description | Usage |
|---|---|---|---|
.teleport | tp | Teleport to coordinates, stop, or death position. | .tp 100 64 -200 / .tp stop / .tp deathpos |
.blocktp | btp | Teleport to a specific block type. | .btp diamond_ore / .btp stop |
.playertp | pt | Teleport to a player by name, or nearest player. | .pt Steve / .pt |
.mobtp | mt | Teleport to nearest entity of a given type. | .mt zombie / .mt cow |
.watertp | wtp | Teleport to nearest water source. | .wtp / .wtp stop |
.top | — | Teleport to the highest block above you. | .top |
Navigation & World
| Command | Aliases | Description | Usage |
|---|---|---|---|
.goto | — | Walk to coordinates using the Pathfinder. | .goto 120 64 -30 / .goto stop |
#goto | — | Baritone ground pathfinding to coordinates. | #goto 120 64 -30 / #goto stop |
.builder | build, schematic, schem | Manage Builder structures: load, save, pos1, pos2, clear, paste. | .builder save mybase / .builder pos1 |
.waypoint | wp | Manage waypoints: add, remove, clear, teleport. | .wp add base / .wp tp base |
Targeting & Social
| Command | Aliases | Description | Usage |
|---|---|---|---|
.target | t | Manage target whitelist: add, remove, clear, list, toggle. | .t add Steve / .t list |
.translate | tr | Translate messages between languages. | .tr send hello fr / .tr Steve en es 5 |
.skinsteal | steal, grabskin | Extracts a player's skin as a PNG file. | .skinsteal Steve |
Server & System
| Command | Aliases | Description | Usage |
|---|---|---|---|
.disconnect | dc, leave | Simulates a network disconnect (Winsock hook). | .dc |
.gm | gamemode | Changes game mode. | .gm c / .gm survival / .gm 1 |
.models | listmodels | Lists available AI models for AIAssistant. | .models |
Script Playground
Test Lua snippets in a live terminal. Type code and press Enter or click Run to execute. This runs a sandboxed Lua interpreter in your browser for quick experimentation.
Troubleshooting
Baritone won't move
Check that Pathfinding is enabled, a target is queued, and no movement module is overriding inputs. Enable Path Debug HUD.
Inventory rules don't save
Save or load a config after changing rules. The configurator stores entries with the module config.
ESP is noisy
Reduce render distance, enable batching, and remove block/entity types you don't need.
Lua script does nothing
Confirm the module is registered, enabled, and uses correct event names: on_tick, on_attack, on_packet_send.