<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Scripts]]></title><description><![CDATA[Share and discover scripts for LiquidBounce]]></description><link>https://forum.liquidbounce.net/category/25</link><generator>RSS for Node</generator><lastBuildDate>Mon, 09 Mar 2026 21:03:42 GMT</lastBuildDate><atom:link href="https://forum.liquidbounce.net/category/25.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Mar 2026 15:00:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[[Script] MatrixNew LongJump (ScriptAPI Port)]]></title><description><![CDATA[<p dir="auto">This script is a port of the Kotlin MatrixNew LongJump mode to the latest LiquidBounce Script API versions.</p>
<p dir="auto">Original module<br />
<a href="https://forum.liquidbounce.net/topic/8568/kotlin-matrix-new-longjump">https://forum.liquidbounce.net/topic/8568/kotlin-matrix-new-longjump</a></p>
<p dir="auto">Download - <a href="/assets/uploads/files/1773068269888-download.zip">download.zip</a><br />
src - <a href="/assets/uploads/files/1773068255428-src.js">src.js</a></p>
<p dir="auto">Recommended settings (<a href="http://funnymc.net" target="_blank" rel="noopener noreferrer nofollow ugc">funnymc.net</a>)<br />
<img src="/assets/uploads/files/1773068102822-1ec2a40c-389d-4d3d-81c0-410fceb6e4e2-image.png" alt="1ec2a40c-389d-4d3d-81c0-410fceb6e4e2-image.png" class=" img-fluid img-markdown" /><br />
You can increase BoostSpeed for longer jumps,<br />
but higher values will increase the chance of flagging.</p>
]]></description><link>https://forum.liquidbounce.net/topic/8628/script-matrixnew-longjump-scriptapi-port</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8628/script-matrixnew-longjump-scriptapi-port</guid><dc:creator><![CDATA[konfeta6664]]></dc:creator><pubDate>Mon, 09 Mar 2026 15:00:26 GMT</pubDate></item><item><title><![CDATA[[Script] AutoJoin for SpookyTime]]></title><description><![CDATA[<p dir="auto">A lightweight script that automatically joins duels on SpookyTime and retries when the mode is full.<br />
<a href="/assets/uploads/files/1773053794832-download.zip">download.zip</a><br />
<a href="/assets/uploads/files/1773053799569-src.js">src.js</a></p>
]]></description><link>https://forum.liquidbounce.net/topic/8627/script-autojoin-for-spookytime</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8627/script-autojoin-for-spookytime</guid><dc:creator><![CDATA[konfeta6664]]></dc:creator><pubDate>Mon, 09 Mar 2026 10:57:14 GMT</pubDate></item><item><title><![CDATA[Sprint Reset for critical hit]]></title><description><![CDATA[Second version: SprintResetV2.js
It's essentially no different from the first, but the code is less "hacky" and smarter.
]]></description><link>https://forum.liquidbounce.net/topic/8624/sprint-reset-for-critical-hit</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8624/sprint-reset-for-critical-hit</guid><dc:creator><![CDATA[rus109]]></dc:creator><pubDate>Sat, 28 Feb 2026 09:14:18 GMT</pubDate></item><item><title><![CDATA[[Types] liquidbounce.d.ts]]></title><description><![CDATA[<ol>
<li>Download the file. <a href="/assets/uploads/files/1769909089125-liquidbounce-dts.zip">liquidbounce-dts.zip</a></li>
<li>Place liquidbounce.d.ts into your script workspace folder (the same directory where you edit/write your scripts).</li>
<li>Restart your editor/IDE if needed.</li>
<li>You’ll get autocomplete, type hints, and better IntelliSense for the LiquidBounce Script API.</li>
</ol>
]]></description><link>https://forum.liquidbounce.net/topic/8606/types-liquidbounce.d.ts</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8606/types-liquidbounce.d.ts</guid><dc:creator><![CDATA[xskylite]]></dc:creator><pubDate>Sun, 01 Feb 2026 01:25:21 GMT</pubDate></item><item><title><![CDATA[Macros SUPPORT NEW WERSION]]></title><description><![CDATA[<p dir="auto"><a href="/assets/uploads/files/1767991670698-macros.js">macros.js</a></p>
]]></description><link>https://forum.liquidbounce.net/topic/8595/macros-support-new-wersion</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8595/macros-support-new-wersion</guid><dc:creator><![CDATA[lalka1123]]></dc:creator><pubDate>Fri, 09 Jan 2026 20:47:59 GMT</pubDate></item><item><title><![CDATA[A TCP-based interface script]]></title><description><![CDATA[My plugin doesn't seem to be loadable by the latest version of LiquidBounce (v0.35.3). So far, the tested working version is v0.35.0.
]]></description><link>https://forum.liquidbounce.net/topic/8591/a-tcp-based-interface-script</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8591/a-tcp-based-interface-script</guid><dc:creator><![CDATA[Dylanvip2024]]></dc:creator><pubDate>Sun, 04 Jan 2026 13:39:55 GMT</pubDate></item><item><title><![CDATA[Help scripts]]></title><description><![CDATA[<p dir="auto">Does anyone know of a script for version 1.21.8 that would display text in the vanilla Minecraft font on the screen? I read the API script and couldn't find anything about displaying text on the screen. If anyone has one or knows of one, please make a simple script that would display “hi” on the screen.</p>
]]></description><link>https://forum.liquidbounce.net/topic/8583/help-scripts</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8583/help-scripts</guid><dc:creator><![CDATA[Andrey0005]]></dc:creator><pubDate>Sat, 20 Dec 2025 10:31:22 GMT</pubDate></item><item><title><![CDATA[help]]></title><description><![CDATA[<p dir="auto">I need a script so that killaura hits everyone at once instead of one player at a time, and a script that increases reach and killaura reach to 20. Please send me such scripts urgently!!!</p>
]]></description><link>https://forum.liquidbounce.net/topic/8580/help</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8580/help</guid><dc:creator><![CDATA[PudzianMonster]]></dc:creator><pubDate>Sun, 07 Dec 2025 15:27:38 GMT</pubDate></item><item><title><![CDATA[[Kotlin] Matrix new longjump]]></title><description><![CDATA[What settings may bypass MLegacy?
]]></description><link>https://forum.liquidbounce.net/topic/8568/kotlin-matrix-new-longjump</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8568/kotlin-matrix-new-longjump</guid><dc:creator><![CDATA[c00lkidd228]]></dc:creator><pubDate>Fri, 31 Oct 2025 06:38:42 GMT</pubDate></item><item><title><![CDATA[StunSlam Script]]></title><description><![CDATA[<p dir="auto">I would like to know if there's a way to make a customizable stunslam script</p>
]]></description><link>https://forum.liquidbounce.net/topic/8567/stunslam-script</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8567/stunslam-script</guid><dc:creator><![CDATA[DLashKace]]></dc:creator><pubDate>Tue, 28 Oct 2025 13:16:40 GMT</pubDate></item><item><title><![CDATA[Server List Explorer Installer]]></title><description><![CDATA[this is a bump message
]]></description><link>https://forum.liquidbounce.net/topic/8558/server-list-explorer-installer</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8558/server-list-explorer-installer</guid><dc:creator><![CDATA[Spoiler]]></dc:creator><pubDate>Sat, 27 Sep 2025 16:21:41 GMT</pubDate></item><item><title><![CDATA[Help with script]]></title><description><![CDATA[<p dir="auto"><a href="/assets/uploads/files/1755012277380-megawallsautoability.js">MegaWallsAutoAbility.js</a><br />
anyone has any idea why it doesnt work? the module is there but when i activate it nothing happens.</p>
]]></description><link>https://forum.liquidbounce.net/topic/8545/help-with-script</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8545/help-with-script</guid><dc:creator><![CDATA[LoXoS10]]></dc:creator><pubDate>Tue, 12 Aug 2025 15:25:17 GMT</pubDate></item><item><title><![CDATA[Help with script]]></title><description><![CDATA[<p dir="auto"><a href="https://pastebin.com/v0umY61Z" target="_blank" rel="noopener noreferrer nofollow ugc">https://pastebin.com/v0umY61Z</a></p>
<p dir="auto">module loads but doesn't work.</p>
]]></description><link>https://forum.liquidbounce.net/topic/8544/help-with-script</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8544/help-with-script</guid><dc:creator><![CDATA[LoXoS10]]></dc:creator><pubDate>Tue, 12 Aug 2025 14:41:54 GMT</pubDate></item><item><title><![CDATA[[Guide] Working with Baritone API]]></title><description><![CDATA[It's definitely doable, but you need to use the unoptimized jar to directly call this. Here is the script in ts, but you may need to adapt the imports to Java.type in js. And also for the visualization manager it's not yet available outside of my project. will release once the api is well designed and performance becomes decent and after a proper name is found for the npm package.
import { BaritoneAPI } from "jvm-types/baritone/api/BaritoneAPI"
import { GoalXZ } from "jvm-types/baritone/api/pathing/goals/GoalXZ"
import { CalculationContext } from "jvm-types/baritone/pathing/movement/CalculationContext"
import { Favoring } from "jvm-types/baritone/utils/pathing/Favoring"
import { BetterBlockPos } from "jvm-types/baritone/api/utils/BetterBlockPos"
import { IPath } from "jvm-types/baritone/api/pathing/calc/IPath"
import { VisualizationManager } from "lbng-utils-typed/dist/visualization-utils"
import { PathCalculationResult$Type } from "jvm-types/baritone/api/utils/PathCalculationResult$Type"

// note: this import is not from baritone-api jar
// it is only presented in the baritone-unoptimized jar
// as the `AStarPathFinder` class is possibly obfuscated in the baritone-standalone jar
// so you will have to install the baritone-unoptimized jar to use this import
import { AStarPathFinder } from "jvm-types/baritone/pathing/calc/AStarPathFinder"


const script = registerScript.apply({
    name: "astar-pathfinder-example",
    version: "1.0.0",
    authors: ["commandblock2"]
});

script.registerModule({
    name: "baritone-api-example",
    description: "Baritone example module",
    category: "Client",

}, (mod) =&gt; {
    mod.on("enable", () =&gt; {
        BaritoneAPI.getSettings().allowSprint.value = true;
        BaritoneAPI.getSettings().primaryTimeoutMS.value = Primitives.long(2000);
        const baritone = BaritoneAPI.getProvider().getPrimaryBaritone();
        baritone.getCustomGoalProcess().setGoalAndPath(new GoalXZ(100, 100))
    })
})

script.registerModule({
    name: "astar-pathfinder-example",
    description: "Direct AStarPathFinder construction example",
    category: "Client",
    settings: {
        goalX: Setting.float({
            name: "Goal X",
            default: 100,
            range: [-10000, 10000] // Assuming a reasonable range
        }),
        goalZ: Setting.float({
            name: "Goal Z",
            default: 100,
            range: [-10000, 10000] // Assuming a reasonable range
        }),
        recalculateInterval: Setting.int({
            name: "Recalculate Interval (ticks)",
            default: 20,
            range: [1, 200]
        })
    }
}, (mod) =&gt; {

    const viz = new VisualizationManager(mod);

    let previousPath: IPath | null = null;

    let lastRecalculateTick = 0;

    const calculatePath = () =&gt; {
        const baritone = BaritoneAPI.getProvider().getPrimaryBaritone();

        // Get current player position
        const playerPos = baritone.getPlayerContext().playerFeet();
        const start = new BetterBlockPos(playerPos.getX(), playerPos.getY(), playerPos.getZ());

        // Create calculation context for threaded use
        const context = new CalculationContext(baritone, true);

        // Create favoring (empty favoring for no preferences)
        const favoring = new Favoring(baritone.getPlayerContext(), previousPath as unknown as IPath, context);

        // Create goal using settings
        const goal = new GoalXZ(mod.settings.goalX.get() as unknown as number, mod.settings.goalZ.get() as unknown as number);

        // Construct AStarPathFinder directly
        const pathfinder = new AStarPathFinder(
            start,           // realStart
            start.getX(),    // startX
            start.getY(),    // startY
            start.getZ(),    // startZ
            goal,            // goal
            favoring,        // favoring
            context          // context
        );

        // @ts-expect-error
        UnsafeThread.run(() =&gt; {
            const result = pathfinder.calculate(Primitives.long(2000), Primitives.long(5000));

            // Handle result
            if (result.getType() != PathCalculationResult$Type.CANCELLATION) {
                const path = result.getPath().get();
                console.log("Path found! Length: " + path.length());
                mc.execute(() =&gt; {
                    viz.addVisualization({
                        lineData: {
                            positions: path.positions().map((pos) =&gt; new Vec3d(pos.x + .5, pos.y, pos.z + .5)),

                        },
                        durationTicks: 20 * 60,
                    });
                    previousPath = path;
                });
                // Use the path as needed - you now have direct access without execution
            } else {
                console.log("Path calculation failed: " + result.getType().toString());
            }
        });
    };

    mod.on("enable", () =&gt; {
        viz.clearAllVisualizations();
        lastRecalculateTick = 0; // Reset on enable
        calculatePath(); // Initial calculation
    });

    mod.on("gametick", () =&gt; {
        if (mc.player &amp;&amp; mc.world &amp;&amp; (mc.player.age - lastRecalculateTick) &gt;= (mod.settings.recalculateInterval.get() as unknown as number)) {
            calculatePath();
            lastRecalculateTick = mc.player.age;
        }
    });
});

export { }

[image: 1754149301736-vlcsnap-2025-08-02-23h41m20s672.png]
]]></description><link>https://forum.liquidbounce.net/topic/8531/guide-working-with-baritone-api</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8531/guide-working-with-baritone-api</guid><dc:creator><![CDATA[commandblock2]]></dc:creator><pubDate>Thu, 31 Jul 2025 17:15:05 GMT</pubDate></item><item><title><![CDATA[Better High Jump [Multiple Jump] Script]]></title><description><![CDATA[<h6>Introducing <em><strong>Better High Jump Script!</strong></em><img src="https://forum.liquidbounce.net/assets/plugins/nodebb-plugin-emoji/emoji/customizations/7a4a2130-ca12-4956-984f-49a3186b48e8-axowhistle.png?v=2d2252001bf" class="not-responsive emoji emoji-customizations emoji--axowhistle" style="height:23px;width:auto;vertical-align:middle" title=":axowhistle:" alt="undefined" /></h6>
<p dir="auto"><a href="/assets/uploads/files/1748175081062-doublejump.js">MultipleJump.js <img src="https://forum.liquidbounce.net/assets/plugins/nodebb-plugin-emoji/emoji/customizations/a277b0c8-76ee-4e1c-bd8f-1b56db6bcbe9-axooof.png?v=2d2252001bf" class="not-responsive emoji emoji-customizations emoji--axooof" style="height:23px;width:auto;vertical-align:middle" title=":axooof:" alt="undefined" /></a></p>
<p dir="auto">The original High Jump in LiquidBounce is useless, so i tried my best to reanimate it xD! The bypass is very easy, you need to damage yourself.</p>
<p dir="auto"><em><strong>Currently bypassed Anti Cheats:</strong></em></p>
<ul>
<li>
<p dir="auto"><strong>NCP</strong> - Double Jump; with a Bow or a Fish Rod</p>
</li>
<li>
<p dir="auto"><strong>NCP</strong> - Explosion Power + ~4 blocks up; with a TNT or a FireBall</p>
</li>
<li>
<p dir="auto"><strong>Verus</strong> - Triple Jump; with anything that damages</p>
</li>
<li>
<p dir="auto"><strong>Vulcan</strong> - Triple Jump; with anything that damages</p>
</li>
<li>
<p dir="auto"><strong>Negativity</strong> - Triple Jump; with anything; but Fish Rods and Bows <em>can flag you</em> sometimes with a ~75% probability</p>
</li>
</ul>
<p dir="auto"><em><strong>All settings i used:</strong></em></p>
<ul>
<li>
<p dir="auto"><strong>NCP</strong>; <em>double jump</em>: 1000ms cooldown, 2 jumps, 2 ticks</p>
</li>
<li>
<p dir="auto"><strong>Verus/Vulcan/Negativity</strong>; <em>triple jump</em>: 1000ms cooldown, 3 jumps, 5 ticks</p>
</li>
<li>
<p dir="auto"><strong>For FireBalls or TNT</strong>: 3000ms cooldown, 5 jumps, 5 ticks</p>
</li>
</ul>
]]></description><link>https://forum.liquidbounce.net/topic/8493/better-high-jump-multiple-jump-script</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8493/better-high-jump-multiple-jump-script</guid><dc:creator><![CDATA[dj]]></dc:creator><pubDate>Sun, 25 May 2025 12:20:22 GMT</pubDate></item><item><title><![CDATA[[Script] BetterAutoLeave]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/1748082716743-46af86c3-ec1e-424f-a37e-c28b448aefd5-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="46af86c3-ec1e-424f-a37e-c28b448aefd5-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><a href="/assets/uploads/files/1748082839272-betterautoleave.js">BetterAutoLeave.js</a></p>
<p dir="auto"><em>Why “BetterAutoLeave”?</em><br />
Because unlike stock AutoLeave—which only checks your HP—BetterAutoLeave <strong>also watches for nearby players and can execute custom commands instead of simply enabling Kick.</strong></p>
]]></description><link>https://forum.liquidbounce.net/topic/8492/script-betterautoleave</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8492/script-betterautoleave</guid><dc:creator><![CDATA[konfeta6664]]></dc:creator><pubDate>Sat, 24 May 2025 10:41:23 GMT</pubDate></item><item><title><![CDATA[Saturn-X collision speed fix]]></title><description><![CDATA[<p dir="auto"><a href="/assets/uploads/files/1746637590410-grimspeed.js">GrimSpeed.js</a><br />
Fixed default Grim Collide speed for some anti-cheat versions<br />
Tested on play.saturn-x.space and <a href="http://anticheat-test.com" target="_blank" rel="noopener noreferrer nofollow ugc">anticheat-test.com</a> (Grim). Likely works on other Grim-like anti-cheats<br />
ps - also on mc.prostotrainer.space</p>
]]></description><link>https://forum.liquidbounce.net/topic/8482/saturn-x-collision-speed-fix</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8482/saturn-x-collision-speed-fix</guid><dc:creator><![CDATA[konfeta6664]]></dc:creator><pubDate>Wed, 07 May 2025 17:15:28 GMT</pubDate></item><item><title><![CDATA[LowHPplayersNotifier]]></title><description><![CDATA[<p dir="auto">This script notifies you in the chat if some players have less than 10 HP at a distance of 50 blocks.</p>
<p dir="auto">(WARNING!!) This script spams the chat</p>
<p dir="auto">Script:<br />
<a href="/assets/uploads/files/1746356666808-killaura.js">Killaura.js</a></p>
]]></description><link>https://forum.liquidbounce.net/topic/8477/lowhpplayersnotifier</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8477/lowhpplayersnotifier</guid><dc:creator><![CDATA[Bogdan0759]]></dc:creator><pubDate>Sun, 04 May 2025 11:04:37 GMT</pubDate></item><item><title><![CDATA[[Script] Funsky join fix]]></title><description><![CDATA[In AntiExploit there is an option that disables this issue as well. The script should not be needed. 
]]></description><link>https://forum.liquidbounce.net/topic/8473/script-funsky-join-fix</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8473/script-funsky-join-fix</guid><dc:creator><![CDATA[kawaiinekololis]]></dc:creator><pubDate>Wed, 30 Apr 2025 12:47:18 GMT</pubDate></item><item><title><![CDATA[[GPLv3] transaction.js]]></title><description><![CDATA[transactions.zip Also looking forward to our marketplace, I do know that some development happened on the branch recently, hope to see it soon.
]]></description><link>https://forum.liquidbounce.net/topic/8443/gplv3-transaction.js</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8443/gplv3-transaction.js</guid><dc:creator><![CDATA[commandblock2]]></dc:creator><pubDate>Mon, 17 Mar 2025 15:31:26 GMT</pubDate></item><item><title><![CDATA[[Script] PearlBlockThrow ?]]></title><description><![CDATA[гитхаб плз
]]></description><link>https://forum.liquidbounce.net/topic/8442/script-pearlblockthrow</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8442/script-pearlblockthrow</guid><dc:creator><![CDATA[Otecc]]></dc:creator><pubDate>Sat, 15 Mar 2025 11:25:31 GMT</pubDate></item><item><title><![CDATA[Vectorized Velocity]]></title><description><![CDATA[<p dir="auto">Changes the velocity direction or strength based on the incoming packet or minecraft player's facing direction. Usually not useful unless you need to be flying sideways or <strong>your facing direction</strong>.</p>
<p dir="auto">Released js for LiquidBounce Nextgen 0.28.1, Licensed under GPLv3</p>
<pre><code class="language-javascript">

function __require(path) {
    if (path.startsWith("@embedded")) {
        return globalThis
    }

    if (path.startsWith("@minecraft-yarn-definitions/types/")) {
        return {
            [path.substring(path.lastIndexOf("/") + 1)]: Java.type(path
                .replaceAll("@minecraft-yarn-definitions/types/", "")
                .replaceAll("/", ".")
            )
        }
    }
    return require(path);
}
var exports = {}

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// imports
/* eslint-disable unused-imports/no-unused-imports */
const _embedded_1 = __require("@embedded");
const EntityVelocityUpdateS2CPacket_1 = __require("@minecraft-yarn-definitions/types/net/minecraft/network/packet/s2c/play/EntityVelocityUpdateS2CPacket");
/* eslint-enable unused-imports/no-unused-imports */
// DO NOT TOUCH ANYTHING ABOVE THIS LINE, also not sure why it didn't work
const script = _embedded_1.registerScript.apply({
    name: "vectorized-velocity-xz",
    version: "1.0.0",
    authors: ["commandblock2"]
});
script.registerModule({
    name: "vectorized-velocity-xz",
    description: "Port of the old script for legacy, for those anticheat that doesn't have proper velocity detection",
    category: "Combat",
    settings: {
        offsetBasedOnPlayerOrIncomingVelocity: _embedded_1.Setting.choose({
            name: "OffsetBasedOnPlayerOrIncomingVelocity",
            choices: ["player", "incoming"],
            default: "player"
        }),
        offset: _embedded_1.Setting.float({
            name: "AngleOffset",
            default: 0,
            range: [-180, 180]
        }),
        amplitude: _embedded_1.Setting.float({
            name: "Amplitude",
            default: 1,
            range: [-100, 100]
        })
    }
}, (mod) =&gt; {
    mod.on("packet", (event) =&gt; {
        if (!_embedded_1.mc.player)
            return;
        const packet = event.packet;
        if (packet instanceof EntityVelocityUpdateS2CPacket_1.EntityVelocityUpdateS2CPacket &amp;&amp; packet.entityId == _embedded_1.mc.player.id) {
            const yaw = mod.settings.offset.get() +
                (mod.settings.offsetBasedOnPlayerOrIncomingVelocity.getValue() == "player" ?
                    -_embedded_1.mc.player.yaw : (Math.atan2(packet.getVelocityX(), packet.getVelocityZ()) * 180 / Math.PI));
            const velocity = Math.sqrt(packet.getVelocityX() * packet.getVelocityX() + packet.getVelocityZ() * packet.getVelocityZ())
                * 8000 * mod.settings.amplitude.get();
            // graaljs traps here:
            // 1. it eats error here when we have loss in precision and does not update the value
            // 2. packet.velocityX and packet.getVelocityX() is very different (public double getVelocityX() { return (double)this.velocityX / 8000.0; })
            // and when reading velocityX graaljs calls getVelocityX() and when writing velocityX it directly writes that
            packet.velocityX = Math.round(velocity * Math.sin(yaw / 180 * Math.PI));
            packet.velocityZ = Math.round(velocity * Math.cos(yaw / 180 * Math.PI));
        }
    });
});
</code></pre>
<hr />
<p dir="auto">original typescript script, won't run directly in LiquidBounce, for more info, see <a href="https://github.com/commandblock2/minecraft-LBNG-types" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/commandblock2/minecraft-LBNG-types</a></p>
<pre><code class="language-typescript">// imports
/* eslint-disable unused-imports/no-unused-imports */
import {
    Setting,
    Vec3i,
    Vec3d,
    MathHelper,
    BlockPos,
    Hand,
    RotationAxis,
    mc,
    Client,
    RotationUtil,
    ItemUtil,
    NetworkUtil,
    InteractionUtil,
    BlockUtil,
    MovementUtil,
    ReflectionUtil,
    ParameterValidator,
    UnsafeThread,
    registerScript
} from "@embedded";
import { EntityVelocityUpdateS2CPacket } from "@minecraft-yarn-definitions/types/net/minecraft/network/packet/s2c/play/EntityVelocityUpdateS2CPacket";
/* eslint-enable unused-imports/no-unused-imports */
// DO NOT TOUCH ANYTHING ABOVE THIS LINE, also not sure why it didn't work


const script = registerScript.apply({
    name: "vectorized-velocity-xz",
    version: "1.0.0",
    authors: ["commandblock2"]
});

script.registerModule({
    name: "vectorized-velocity-xz",
    description: "Port of the old script for legacy, for those anticheat that doesn't have proper velocity detection", 
    category: "Combat",
    settings: {
        offsetBasedOnPlayerOrIncomingVelocity: Setting.choose({
            name: "OffsetBasedOnPlayerOrIncomingVelocity",
            choices: ["player", "incoming"], 
            default: "player"
        }),
        offset: Setting.float({
            name: "AngleOffset",
            default: 0, 
            range: [-180, 180]
        }),
        amplitude: Setting.float({
            name: "Amplitude",
            default: 1,
            range: [-100, 100]
        })
    }
}, (mod) =&gt; {
    mod.on("packet", (event) =&gt; {
        if (!mc.player)
            return;

        const packet = event.packet
        if (packet instanceof EntityVelocityUpdateS2CPacket &amp;&amp; packet.entityId == mc.player.id) {

            const yaw = mod.settings.offset.get() + 
            (mod.settings.offsetBasedOnPlayerOrIncomingVelocity.getValue() == "player" ? 
            -mc.player.yaw : (Math.atan2(packet.getVelocityX(), packet.getVelocityZ()) * 180 / Math.PI));

            const velocity = Math.sqrt(packet.getVelocityX() * packet.getVelocityX() + packet.getVelocityZ() * packet.getVelocityZ())
             * 8000 * mod.settings.amplitude.get();

            // graaljs traps here:
            // 1. it eats error here when we have loss in precision and does not update the value
            // 2. packet.velocityX and packet.getVelocityX() is very different (public double getVelocityX() { return (double)this.velocityX / 8000.0; })
            // and when reading velocityX graaljs calls getVelocityX() and when writing velocityX it directly writes that
            packet.velocityX = Math.round(velocity * Math.sin(yaw / 180 * Math.PI))
            packet.velocityZ = Math.round(velocity * Math.cos(yaw / 180 * Math.PI))

        }
    })
})
</code></pre>
]]></description><link>https://forum.liquidbounce.net/topic/8437/vectorized-velocity</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8437/vectorized-velocity</guid><dc:creator><![CDATA[commandblock2]]></dc:creator><pubDate>Thu, 13 Mar 2025 16:20:29 GMT</pubDate></item><item><title><![CDATA[[Script] Mediator 0.2.1 (Update)]]></title><description><![CDATA[<h1>Mediator (v0.2)</h1>
<p dir="auto"><strong>Author : mumy255</strong></p>
<p dir="auto">This is a JavaScript script designed for managing and transmitting data between different modules or components. Its core functionality is to store data in the form of key-value pairs and use a listener mechanism to respond to data changes.</p>
<p dir="auto">Download:<br />
<a href="/assets/uploads/files/1741366386166-mediator-0.2.1.zip">Mediator 0.2.1 and Document.zip</a>  (for nextgen 0.27)<br />
<a href="/assets/uploads/files/1740659878218-mediator-0.2.zip">Mediator 0.2 and Document.zip</a> (for nextgen 0.26)<br />
<a href="/assets/uploads/files/1740637656186-mediator-0.1.zip">Mediator 0.1 and Document.zip</a> (for nextgen 0.26)</p>
<hr />
<h2>Getting the <code>Mediator</code> Module Instance</h2>
<h3>Code Example</h3>
<pre><code class="language-javascript">var mediator;
script.on("enable", () =&gt; {
    mediator = Client.getModuleManager().get("Mediator");
});
</code></pre>
<h3>Step-by-Step Explanation</h3>
<ol>
<li>
<p dir="auto"><strong><code>script.on("enable", callback)</code></strong>:</p>
<ul>
<li><code>script.on("enable", ...)</code> is an event listener that triggers when the script is enabled. The callback function is executed once the script is enabled.</li>
<li>Inside this callback, the operation to fetch the <code>Mediator</code> module instance is performed.</li>
</ul>
</li>
<li>
<p dir="auto"><strong><code>Client.getModuleManager()</code></strong>:</p>
<ul>
<li><code>Client.getModuleManager()</code> is an API that retrieves the client module manager. It is responsible for managing all loaded and enabled modules.</li>
</ul>
</li>
<li>
<p dir="auto"><strong><code>.get("Mediator")</code></strong>:</p>
<ul>
<li><code>get("Mediator")</code> is used to fetch the instance of the module named <code>Mediator</code> from the module manager. <code>"Mediator"</code> is the unique identifier for this module.</li>
<li>If the <code>Mediator</code> module is loaded and enabled, the <code>get()</code> method will return the module's instance. If the module is not enabled or loaded, it may return <code>null</code>.</li>
</ul>
</li>
<li>
<p dir="auto"><strong>Saving the Module Instance</strong>:</p>
<ul>
<li>The retrieved module instance is saved to the <code>mediator</code> variable, which can be used for subsequent operations.</li>
</ul>
</li>
</ol>
<h3>Notes</h3>
<ul>
<li>The <code>mediator</code> will only be correctly assigned after the script is enabled, so the fetching operation should be inside the <code>script.on("enable", ...)</code> callback.</li>
<li>If the module doesn't exist or wasn't loaded correctly, <code>mediator</code> will be <code>null</code>.</li>
</ul>
<h3>Extended Example</h3>
<pre><code class="language-javascript">var mediator;
script.on("enable", () =&gt; {
    mediator = Client.getModuleManager().get("Mediator");

    if (mediator) {
        Client.displayChatMessage("Mediator module is now available.");
    } else {
        Client.displayChatMessage("Failed to get Mediator module.");
    }
});
</code></pre>
<p dir="auto">In this example, the code checks if <code>mediator</code> was successfully fetched, and displays a message based on the result.</p>
<hr />
<h2>Methods</h2>
<h3><code>putData(key: string, value: any | null): boolean</code></h3>
<p dir="auto">Adds data to the data store and notifies relevant listeners when the data changes.</p>
<p dir="auto"><strong>Parameters:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>The key of the data item</td>
<td><code>string</code></td>
</tr>
<tr>
<td>value</td>
<td>The value of the data item, can be <code>null</code> to clear the data</td>
<td><code>any/null</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Return Value:</strong><br />
Returns a boolean indicating whether the operation was successful.</p>
<p dir="auto"><strong>Example:</strong></p>
<pre><code class="language-ts">const success = dataStore.putData("user", { name: "John", age: 30 });
Client.displayChatMessage(success); // true
</code></pre>
<hr />
<h3><code>getData(key: string): any | null</code></h3>
<p dir="auto">Retrieves the data for the specified key.</p>
<p dir="auto"><strong>Parameters:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>The key of the data item</td>
<td><code>string</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Return Value:</strong><br />
Returns the data for the specified key, or <code>null</code> if the data does not exist.</p>
<p dir="auto"><strong>Example:</strong></p>
<pre><code class="language-ts">const user = dataStore.getData("user");
Client.displayChatMessage(user); // { name: "John", age: 30 }
</code></pre>
<hr />
<h3><code>clearData(key: string): boolean</code></h3>
<p dir="auto">Clears the data for the specified key.</p>
<p dir="auto"><strong>Parameters:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>The key of the data item</td>
<td><code>string</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Return Value:</strong><br />
Returns a boolean indicating whether the operation was successful.</p>
<p dir="auto"><strong>Example:</strong></p>
<pre><code class="language-ts">const success = dataStore.clearData("user");
Client.displayChatMessage(success); // true
</code></pre>
<hr />
<h3><code>hasData(key: string): boolean</code></h3>
<p dir="auto">Checks if data exists for the specified key.</p>
<p dir="auto"><strong>Parameters:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>The key of the data item</td>
<td><code>string</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Return Value:</strong><br />
Returns a boolean indicating whether data exists for the specified key.</p>
<p dir="auto"><strong>Example:</strong></p>
<pre><code class="language-ts">const hasData = dataStore.hasData("user");
Client.displayChatMessage(hasData); // true
</code></pre>
<hr />
<h3><code>registerListener(jsObject: { key: string; name: string }, callback: Listener): boolean</code></h3>
<p dir="auto">Registers a listener to monitor changes in data for the specified key.</p>
<p dir="auto"><strong>Parameters:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>jsObject</td>
<td>An object containing <code>key</code> (data item's key) and <code>name</code> (listener name)</td>
<td><code>{ key: string; name: string }</code></td>
</tr>
<tr>
<td>callback</td>
<td>The callback function for the listener, which accepts <code>value</code> and <code>state</code> (<code>PRE</code> or <code>POST</code>) as parameters</td>
<td><code>(value: any/null, state: string) =&gt; void</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Return Value:</strong><br />
Returns a boolean indicating whether the listener was successfully registered.</p>
<p dir="auto"><strong>Example:</strong></p>
<pre><code class="language-ts">const listener: Listener = (value, state) =&gt; {
  Client.displayChatMessage(`Data changed: ${value}, State: ${state}`);
};

mediator.registerListener({ key: "user", name: "userListener" }, listener);
</code></pre>
<hr />
<h3><code>unregisterListener(key: string, name: string): boolean</code></h3>
<p dir="auto">Unregisters a listener to stop monitoring data changes for the specified key.</p>
<p dir="auto"><strong>Parameters:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>The key of the data item</td>
<td><code>string</code></td>
</tr>
<tr>
<td>name</td>
<td>The name of the listener</td>
<td><code>string</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Return Value:</strong><br />
Returns a boolean indicating whether the listener was successfully unregistered.</p>
<p dir="auto"><strong>Example:</strong></p>
<pre><code class="language-ts">const success = mediator.unregisterListener("user", "userListener");
Client.displayChatMessage(success); // true
</code></pre>
<hr />
<h2>Example Usage</h2>
<pre><code class="language-ts">// Add data to the data store
mediator.putData("user", { name: "John", age: 30 });

// Retrieve the data
const user = mediator.getData("user");
console.log(user); // Output: { name: "John", age: 30 }

// Check if the data exists
const hasData = mediator.hasData("user");
console.log(hasData); // Output: true

// Register a listener
const listener: Listener = (value, state) =&gt; {
  Client.displayChatMessage(`Data changed: ${value}, State: ${state}`);
};
mediator.registerListener({ key: "user", name: "userListener" }, listener);

// Update the data and trigger the listener
mediator.putData("user", { name: "Jane", age: 25 });  // The state will be "POST"

// Unregister the listener
mediator.unregisterListener("user", "userListener");

// Clear the data
mediator.clearData("user");
</code></pre>
]]></description><link>https://forum.liquidbounce.net/topic/8411/script-mediator-0.2.1-update</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8411/script-mediator-0.2.1-update</guid><dc:creator><![CDATA[CookieChinese]]></dc:creator><pubDate>Fri, 21 Feb 2025 06:41:23 GMT</pubDate></item><item><title><![CDATA[[Kotlin] A simple path finder and executor module]]></title><description><![CDATA[Are you interested to contribute this for LB repo?
]]></description><link>https://forum.liquidbounce.net/topic/8408/kotlin-a-simple-path-finder-and-executor-module</link><guid isPermaLink="true">https://forum.liquidbounce.net/topic/8408/kotlin-a-simple-path-finder-and-executor-module</guid><dc:creator><![CDATA[Konoha Scarlet]]></dc:creator><pubDate>Sun, 16 Feb 2025 10:42:04 GMT</pubDate></item></channel></rss>