Skip to main content

Overview

The ModuleManager is the central hub for managing all client modules (hacks) in LiquidBounce. It handles module registration, key bindings, state management, and provides access to all available modules. Package: net.ccbluex.liquidbounce.features.module

Object Declaration

object ModuleManager : EventListener, Collection<ClientModule>

Properties

modulesConfig
Config
Root configuration object containing all module configurations

Core Methods

Module Registration

registerInbuilt()
fun registerInbuilt()
Registers all built-in LiquidBounce modules. Called during client initialization.
fun registerInbuilt()
Registers modules across all categories:
  • Combat (KillAura, Velocity, Criticals, etc.)
  • Movement (Fly, Speed, NoSlow, etc.)
  • Player (AutoArmor, ChestStealer, NoFall, etc.)
  • Render (ESP, Tracers, Nametags, etc.)
  • World (Scaffold, Nuker, FastBreak, etc.)
  • Exploit (Disabler, Phase, AntiHunger, etc.)
  • Misc (AntiBot, Teams, AutoConfig, etc.)
  • Fun (Derp, SkinDerp, Twerk, etc.)
addModule()
fun addModule(module: ClientModule)
Adds a custom module to the module manager.
fun addModule(module: ClientModule)
Throws an error if a module with the same name is already registered.
removeModule()
fun removeModule(module: ClientModule)
Removes a module from the module manager.
fun removeModule(module: ClientModule)
Also disables the module if it’s running and unregisters its event handlers.

Module Access

get()
operator fun get(moduleName: String): ClientModule?
Gets a module by name (case-insensitive).
operator fun get(moduleName: String): ClientModule?
Example:
val killAura = ModuleManager["KillAura"]
getModuleByName()
fun getModuleByName(module: String): ClientModule?
Script API method to get a module by name (case-insensitive).
@ScriptApiRequired
fun getModuleByName(module: String): ClientModule?
getModules()
fun getModules(): Collection<ClientModule>
Returns all registered modules.
@ScriptApiRequired
fun getModules(): Collection<ClientModule>
getCategories()
fun getCategories(): Array<String>
Returns all module category names.
@ScriptApiRequired
fun getCategories(): Array<String>

Event Handling

ModuleManager handles several key events:

Key Bindings

private val keyboardKeyHandler = handler<KeyboardKeyEvent>
private val mouseButtonHandler = handler<MouseButtonEvent>
Supports three bind actions:
  • TOGGLE: Press key to toggle module on/off
  • HOLD: Module enabled while key is held
  • SMART: Toggles if tapped, holds if key is held down

World Changes

private val handleWorldChange = sequenceHandler<WorldChangeEvent>
Handles delayed module enabling when joining a world. Modules enabled in configuration are activated after the player spawns.

Disconnect Handling

private val handleDisconnect = handler<DisconnectEvent>
Disables modules with disableOnQuit = true when disconnecting from a server.

Usage Examples

Getting and Toggling a Module

val killAura = ModuleManager["KillAura"]
killAura?.enabled = true

Iterating Through Modules

for (module in ModuleManager) {
    if (module.category == ModuleCategories.COMBAT) {
        println("${module.name} - ${module.enabled}")
    }
}

Creating a Custom Module

val myModule = object : ClientModule(
    name = "MyModule",
    category = ModuleCategories.MISC
) {
    override fun onEnable() {
        // Module enabled logic
    }
}

ModuleManager.addModule(myModule)

See Also

Build docs developers (and LLMs) love