Skip to main content

Overview

Modules are the primary way to add functionality to LiquidBounce. Script modules integrate seamlessly with built-in modules and appear in the ClickGUI, can be bound to keys, and respond to events.

Basic Module Structure

Use script.registerModule() to create a new module:
var script = registerScript({
    name: "MyScript",
    version: "1.0.0",
    authors: ["Developer"]
});

script.registerModule({
    name: "ExampleModule",
    category: "Movement"
}, function(module) {
    // Module logic here
});

Module Configuration

The first parameter to registerModule() is a configuration object:
name
string
required
The display name of the module
category
string
required
Module category. Available categories:
  • Combat
  • Movement
  • Player
  • World
  • Render
  • Client
  • Exploit
  • Fun
  • Misc
description
string
Optional description shown in the ClickGUI
tag
string
Optional tag displayed next to the module name in the ArrayList
settings
object
Module settings (values) - see Module Settings

Module Settings

Add configurable settings to your module using the Setting object:
script.registerModule({
    name: "SpeedModule",
    category: "Movement",
    description: "Increases movement speed",
    settings: {
        speed: Setting.float({
            name: "Speed",
            default: 1.5,
            range: [0.1, 5.0],
            suffix: "x"
        }),
        jumpBoost: Setting.boolean({
            name: "JumpBoost",
            default: true
        })
    }
}, function(module) {
    // Access settings
    var speedValue = module.settings.speed.get();
    var jumpBoostEnabled = module.settings.jumpBoost.get();
});

Available Setting Types

Setting.boolean({
    name: "Enabled",
    default: true
})

Module Event Handlers

Handle events within your module using module.on():
script.registerModule({
    name: "ChatLogger",
    category: "Misc"
}, function(module) {
    
    module.on("enable", function() {
        Client.displayChatMessage("§aChatLogger enabled!");
    });
    
    module.on("disable", function() {
        Client.displayChatMessage("§cChatLogger disabled!");
    });
    
    module.on("chatReceive", function(event) {
        var message = event.getMessage();
        Client.displayChatMessage("§7[LOG] " + message);
    });
    
});

Lifecycle Events

enable
event
Called when the module is enabled
disable
event
Called when the module is disabled
See the Events documentation for a complete list of available events.

Complete Module Example

Here’s a fully-featured module that demonstrates various features:
var script = registerScript({
    name: "AutoSprint",
    version: "1.0.0",
    authors: ["Developer"]
});

script.registerModule({
    name: "AutoSprint",
    category: "Movement",
    description: "Automatically sprints when moving",
    settings: {
        mode: Setting.choose({
            name: "Mode",
            default: "Legit",
            choices: ["Legit", "Omni"]
        }),
        hungerCheck: Setting.boolean({
            name: "CheckHunger",
            default: true
        }),
        minHunger: Setting.int({
            name: "MinHunger",
            default: 6,
            range: [0, 20]
        })
    }
}, function(module) {
    
    module.on("enable", function() {
        Client.displayChatMessage("§a[AutoSprint] Enabled");
    });
    
    module.on("disable", function() {
        if (mc.player) {
            mc.player.setSprinting(false);
        }
        Client.displayChatMessage("§c[AutoSprint] Disabled");
    });
    
    module.on("playerTick", function(event) {
        var player = mc.player;
        if (!player) return;
        
        var mode = module.settings.mode.get();
        var checkHunger = module.settings.hungerCheck.get();
        var minHunger = module.settings.minHunger.get();
        
        // Check hunger if enabled
        if (checkHunger && player.getFoodData().getFoodLevel() < minHunger) {
            player.setSprinting(false);
            return;
        }
        
        // Legit mode: only sprint when moving forward
        if (mode === "Legit") {
            var movingForward = player.input.getMoveVector().z > 0;
            if (movingForward) {
                player.setSprinting(true);
            }
        }
        // Omni mode: sprint in any direction
        else if (mode === "Omni") {
            var moving = player.input.getMoveVector().lengthSquared() > 0;
            if (moving) {
                player.setSprinting(true);
            }
        }
    });
    
    // Update tag with current mode
    var currentMode = module.settings.mode.get();
    module.tag = currentMode;
    
});

Accessing Module Instance

The module instance passed to the callback provides several useful members:
settings
object
Access to all module settings via module.settings.settingName.get()
tag
string
Set or get the module tag: module.tag = "Value"
name
string
The module’s name (read-only)
enabled
boolean
Check or set module state: module.enabled = true
on
function
Register event handlers: module.on("eventName", handler)

Advanced Features

Dynamic Tags

Update the module’s ArrayList tag dynamically:
module.on("playerTick", function() {
    var speed = mc.player.getDeltaMovement().horizontalDistance() * 20;
    module.tag = speed.toFixed(2) + " b/s";
});

Accessing Other Modules

You can interact with other modules:
var killAura = Client.moduleManager.getModule("KillAura");
if (killAura && killAura.enabled) {
    // KillAura is enabled
}

Best Practices

Always reset state when the module is disabled:
module.on("disable", function() {
    mc.player.setSprinting(false);
    // Reset any modified game state
});
Always check if player/world exists before accessing:
var player = mc.player;
if (!player) return;
Choose the right event for your needs:
  • playerTick for frequent updates
  • gameTick for game logic
  • Specific events like packet for network operations
  • Avoid heavy operations in frequent events like playerTick
  • Cache values when possible
  • Use early returns to skip unnecessary processing

Next Steps

Working with Events

Learn about all available events

API Reference

Explore utility functions and APIs

Build docs developers (and LLMs) love