Hello World
The simplest possible script:registerScript({
name: "HelloWorld",
version: "1.0.0",
authors: ["YourName"]
});
Client.displayChatMessage("Hello from LiquidBounce scripting!");
Speed Counter Module
A simple module that displays your current speed:SpeedCounter.js
registerScript({
name: "SpeedCounter",
version: "1.0.0",
authors: ["YourName"]
});
registerModule({
name: "SpeedCounter",
category: "Render",
description: "Displays your current speed in the ArrayList",
tag: "0.00"
}, (module) => {
module.on("playerTick", () => {
if (mc.player === null) return;
const speed = MovementUtil.getSpeed();
module.tag = speed.toFixed(2);
});
});
Auto Sprint Module
Automatically sprint when moving forward:AutoSprint.js
registerScript({
name: "AutoSprint",
version: "1.0.0",
authors: ["YourName"]
});
registerModule({
name: "AutoSprint",
category: "Movement",
description: "Automatically sprint when moving",
settings: {
allDirections: Setting.boolean({
name: "AllDirections",
default: false
})
}
}, (module) => {
module.on("playerTick", () => {
const player = mc.player;
if (player === null) return;
const allDirections = module.settings.allDirections.value;
const moving = MovementUtil.isMoving();
if (allDirections) {
// Sprint in all directions
if (moving) {
player.setSprinting(true);
}
} else {
// Only sprint when moving forward
if (moving && mc.options.keyUp.isDown()) {
player.setSprinting(true);
}
}
});
});
Health Warning Module
Warns you when health is low:HealthWarning.js
registerScript({
name: "HealthWarning",
version: "1.0.0",
authors: ["YourName"]
});
registerModule({
name: "HealthWarning",
category: "Player",
description: "Warns when health is low",
settings: {
threshold: Setting.float({
name: "Threshold",
default: 10.0,
range: [1.0, 20.0],
suffix: " HP"
}),
sound: Setting.boolean({
name: "PlaySound",
default: true
})
}
}, (module) => {
let wasLowHealth = false;
module.on("healthUpdate", (event) => {
const threshold = module.settings.threshold.value;
const playSound = module.settings.sound.value;
const health = event.health;
const isLowHealth = health <= threshold;
// Only warn when health first drops below threshold
if (isLowHealth && !wasLowHealth) {
Client.displayChatMessage(
"§c[WARNING] Low Health: " + health.toFixed(1) + " HP"
);
if (playSound && mc.player !== null) {
// Play warning sound
mc.player.playSound(
Java.type("net.minecraft.sounds.SoundEvents").ANVIL_LAND,
1.0,
1.0
);
}
}
wasLowHealth = isLowHealth;
});
module.on("disable", () => {
wasLowHealth = false;
});
});
Anti-AFK Module
Prevents being kicked for AFK:AntiAFK.js
registerScript({
name: "AntiAFK",
version: "1.0.0",
authors: ["YourName"]
});
registerModule({
name: "AntiAFK",
category: "Player",
description: "Prevents AFK kicks",
settings: {
mode: Setting.choose({
name: "Mode",
choices: ["Rotate", "Jump", "Sneak"],
default: "Rotate"
}),
delay: Setting.int({
name: "Delay",
default: 100,
range: [20, 400],
suffix: " ticks"
})
}
}, (module) => {
let tickCounter = 0;
let rotationDirection = 1;
module.on("playerTick", () => {
const player = mc.player;
if (player === null) return;
const mode = module.settings.mode.value;
const delay = module.settings.delay.value;
tickCounter++;
if (tickCounter >= delay) {
tickCounter = 0;
switch (mode) {
case "Rotate":
const currentYaw = player.getYRot();
player.setYRot(currentYaw + (5 * rotationDirection));
rotationDirection *= -1;
break;
case "Jump":
if (player.onGround()) {
player.jumpFromGround();
}
break;
case "Sneak":
player.setShiftKeyDown(!player.isShiftKeyDown());
break;
}
}
});
module.on("disable", () => {
tickCounter = 0;
rotationDirection = 1;
if (mc.player !== null && module.settings.mode.value === "Sneak") {
mc.player.setShiftKeyDown(false);
}
});
});
Module Toggle Command
Command to quickly toggle modules:ToggleCommand.js
registerScript({
name: "ToggleCommand",
version: "1.0.0",
authors: ["YourName"]
});
registerCommand({
name: "toggle",
aliases: ["t"],
parameters: [
{
name: "module",
required: true,
getCompletions: (begin, args) => {
const suggestions = [];
const modules = Client.moduleManager.modules;
modules.forEach((module) => {
const name = module.name;
if (name.toLowerCase().startsWith(begin.toLowerCase())) {
suggestions.push(name);
}
});
return suggestions;
}
}
],
onExecute: (moduleName) => {
const module = Client.moduleManager.getModule(moduleName);
if (module === null) {
Client.displayChatMessage("§cModule not found: " + moduleName);
return;
}
module.enabled = !module.enabled;
const status = module.enabled ? "§aenabled" : "§cdisabled";
Client.displayChatMessage(module.name + " " + status);
}
});
Waypoint Command
Save and teleport to waypoints:Waypoints.js
registerScript({
name: "Waypoints",
version: "1.0.0",
authors: ["YourName"]
});
const waypoints = {};
registerCommand({
name: "waypoint",
aliases: ["wp"],
hub: true,
subcommands: [
{
name: "add",
parameters: [
{
name: "name",
required: true
}
],
onExecute: (name) => {
const player = mc.player;
if (player === null) {
Client.displayChatMessage("§cNot in game!");
return;
}
const pos = player.blockPosition();
waypoints[name] = {
x: pos.getX(),
y: pos.getY(),
z: pos.getZ()
};
Client.displayChatMessage(
"§aWaypoint '" + name + "' saved at " +
pos.getX() + ", " + pos.getY() + ", " + pos.getZ()
);
}
},
{
name: "remove",
parameters: [
{
name: "name",
required: true,
getCompletions: (begin, args) => {
return Object.keys(waypoints);
}
}
],
onExecute: (name) => {
if (waypoints[name]) {
delete waypoints[name];
Client.displayChatMessage("§aWaypoint '" + name + "' removed");
} else {
Client.displayChatMessage("§cWaypoint not found: " + name);
}
}
},
{
name: "list",
onExecute: () => {
const names = Object.keys(waypoints);
if (names.length === 0) {
Client.displayChatMessage("§cNo waypoints saved");
return;
}
Client.displayChatMessage("§aWaypoints:");
names.forEach((name) => {
const wp = waypoints[name];
Client.displayChatMessage(
" " + name + ": " + wp.x + ", " + wp.y + ", " + wp.z
);
});
}
},
{
name: "goto",
parameters: [
{
name: "name",
required: true,
getCompletions: (begin, args) => {
return Object.keys(waypoints);
}
}
],
onExecute: (name) => {
const wp = waypoints[name];
if (!wp) {
Client.displayChatMessage("§cWaypoint not found: " + name);
return;
}
const player = mc.player;
if (player === null) {
Client.displayChatMessage("§cNot in game!");
return;
}
const distance = Math.sqrt(
Math.pow(wp.x - player.getX(), 2) +
Math.pow(wp.y - player.getY(), 2) +
Math.pow(wp.z - player.getZ(), 2)
);
Client.displayChatMessage(
"§aWaypoint '" + name + "' is " +
distance.toFixed(1) + " blocks away"
);
}
}
]
});
Custom KillAura with Rotations
A complete combat module:CustomKillAura.js
registerScript({
name: "CustomKillAura",
version: "2.0.0",
authors: ["YourName"]
});
registerModule({
name: "CustomKillAura",
category: "Combat",
description: "Advanced KillAura with rotation support",
settings: {
range: Setting.float({
name: "Range",
default: 4.2,
range: [1.0, 6.0],
suffix: " blocks"
}),
delay: Setting.intRange({
name: "Delay",
default: [50, 100],
range: [0, 500],
suffix: "ms"
}),
targetPlayers: Setting.boolean({
name: "TargetPlayers",
default: true
}),
targetMobs: Setting.boolean({
name: "TargetMobs",
default: false
}),
targetAnimals: Setting.boolean({
name: "TargetAnimals",
default: false
}),
rotations: Setting.boolean({
name: "Rotations",
default: true
}),
raytraced: Setting.boolean({
name: "RaytracedRotations",
default: false
}),
autoBlock: Setting.boolean({
name: "AutoBlock",
default: false
})
}
}, (module) => {
let lastAttack = 0;
let currentTarget = null;
module.on("enable", () => {
lastAttack = 0;
currentTarget = null;
module.tag = "Idle";
});
module.on("disable", () => {
currentTarget = null;
module.tag = "";
});
module.on("playerTick", () => {
const player = mc.player;
const world = mc.level;
if (player === null || world === null) return;
// Get settings
const range = module.settings.range.value;
const delayMin = module.settings.delay.value.start;
const delayMax = module.settings.delay.value.endInclusive;
const targetPlayers = module.settings.targetPlayers.value;
const targetMobs = module.settings.targetMobs.value;
const targetAnimals = module.settings.targetAnimals.value;
const useRotations = module.settings.rotations.value;
const raytraced = module.settings.raytraced.value;
const autoBlock = module.settings.autoBlock.value;
// Find target
currentTarget = findTarget(
world, player, range,
targetPlayers, targetMobs, targetAnimals
);
if (currentTarget === null) {
module.tag = "No Target";
return;
}
// Update tag with target name
module.tag = currentTarget.getName().getString();
// Check attack delay
const now = Date.now();
const randomDelay = delayMin + Math.random() * (delayMax - delayMin);
if (now - lastAttack < randomDelay) {
return;
}
// Aim at target
if (useRotations) {
let rotation;
if (raytraced) {
rotation = RotationUtil.newRaytracedRotationEntity(
currentTarget, range, 0.0
);
} else {
rotation = RotationUtil.newRotationEntity(currentTarget);
}
if (rotation !== null) {
RotationUtil.aimAtRotation(rotation, true);
}
}
// Auto block
if (autoBlock) {
const item = player.getMainHandItem();
if (item.getItem().toString().includes("sword")) {
mc.gameMode.useItem(player, Hand.MAIN_HAND);
}
}
// Attack
mc.gameMode.attack(player, currentTarget);
player.swing(Hand.MAIN_HAND);
lastAttack = now;
});
function findTarget(world, player, range, targetPlayers, targetMobs, targetAnimals) {
let closestTarget = null;
let closestDistance = range * range;
const entities = world.entitiesForRendering();
for (let i = 0; i < entities.size(); i++) {
const entity = entities.get(i);
if (entity === player) continue;
if (entity.isRemoved()) continue;
// Check entity type
const entityType = entity.getType().toString();
if (entityType.includes("player")) {
if (!targetPlayers) continue;
} else if (entity instanceof Java.type("net.minecraft.world.entity.monster.Monster")) {
if (!targetMobs) continue;
} else if (entity instanceof Java.type("net.minecraft.world.entity.animal.Animal")) {
if (!targetAnimals) continue;
} else {
continue;
}
// Check distance
const distSq = player.distanceToSqr(entity);
if (distSq < closestDistance) {
closestDistance = distSq;
closestTarget = entity;
}
}
return closestTarget;
}
});
Multi-Language Example
The same module in different languages:registerScript({
name: "SimpleModule",
version: "1.0.0",
authors: ["YourName"]
});
registerModule({
name: "SimpleModule",
category: "Misc",
description: "A simple example module"
}, (module) => {
module.on("enable", () => {
Client.displayChatMessage("Module enabled!");
});
module.on("playerTick", () => {
if (mc.player === null) return;
// Module logic here
});
});
Next Steps
- API Reference - Explore the complete API
- Custom Modules - Learn module creation in depth
- Custom Commands - Learn command creation in depth