Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

LiquidBounce Forum

  1. Home
  2. Resources
  3. Scripts
  4. [Guide] Working with Baritone API

[Guide] Working with Baritone API

Scheduled Pinned Locked Moved Scripts
3 Posts 1 Posters 648 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    commandblock2
    wrote on last edited by kawaiinekololis
    #1

    7cd8d800-c82a-46d9-9471-dcab0068a3ad-image.png

    ts version (npm package subject to change in the near future once a proper name is found)

    import { BaritoneAPI } from "jvm-types/baritone/api/BaritoneAPI"
    import { GoalXZ } from "jvm-types/baritone/api/pathing/goals/GoalXZ"
    
    const script = registerScript.apply({
        name: "baritone-api-example",
        version: "1.0.0",
        authors: ["commandblock2"]
    });
    
    script.registerModule({
        name: "baritone-api-example",
        description: "Baritone example module",
        category: "Client",
    
    }, (mod) => {
        mod.on("enable", () => {
            BaritoneAPI.getSettings().allowSprint.value = true;
            BaritoneAPI.getSettings().primaryTimeoutMS.value = Primitives.long(2000);
            const baritone = BaritoneAPI.getProvider().getPrimaryBaritone();
            baritone.getCustomGoalProcess().setGoalAndPath(new GoalXZ(100, 100))
        })
    })
    
    export { }
    

    js version, but slightly changed from the compiled one (imports to Java.type), probably should work but never tested.
    Edit: The directly compiled version works on my custom branch. But I was kinda disappointed for baritone not documenting if they provide access to their path finding engine without path execution, if any one knows, please leave a comment.

    const BaritoneAPI_1 = Java.type("baritone.api.BaritoneAPI");
    const GoalXZ_1 = Java.type("baritone.api.pathing.goals.GoalXZ");
    const script = registerScript.apply({
        name: "baritone-api-example",
        version: "1.0.0",
        authors: ["commandblock2"]
    });
    script.registerModule({
        name: "baritone-api-example",
        description: "Baritone example module",
        category: "Client",
    }, (mod) => {
        mod.on("enable", () => {
            BaritoneAPI_1.BaritoneAPI.getSettings().allowSprint.value = true;
            BaritoneAPI_1.BaritoneAPI.getSettings().primaryTimeoutMS.value = Primitives.long(2000);
            const baritone = BaritoneAPI_1.BaritoneAPI.getProvider().getPrimaryBaritone();
            baritone.getCustomGoalProcess().setGoalAndPath(new GoalXZ_1.GoalXZ(100, 100));
        });
    });
    
    1 Reply Last reply
    0
    • C Offline
      C Offline
      commandblock2
      wrote on last edited by
      #2

      it probably does have a AStarPathFinder just for this, but it's gonna be tested if this is really going to work.

      image.png

      1 Reply Last reply
      1
      • kawaiinekololisK kawaiinekololis pinned this topic on
      • C Offline
        C Offline
        commandblock2
        wrote on last edited by
        #3

        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) => {
            mod.on("enable", () => {
                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) => {
        
            const viz = new VisualizationManager(mod);
        
            let previousPath: IPath | null = null;
        
            let lastRecalculateTick = 0;
        
            const calculatePath = () => {
                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(() => {
                    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(() => {
                            viz.addVisualization({
                                lineData: {
                                    positions: path.positions().map((pos) => 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", () => {
                viz.clearAllVisualizations();
                lastRecalculateTick = 0; // Reset on enable
                calculatePath(); // Initial calculation
            });
        
            mod.on("gametick", () => {
                if (mc.player && mc.world && (mc.player.age - lastRecalculateTick) >= (mod.settings.recalculateInterval.get() as unknown as number)) {
                    calculatePath();
                    lastRecalculateTick = mc.player.age;
                }
            });
        });
        
        export { }
        

        vlcsnap-2025-08-02-23h41m20s672.png

        1 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        About
        • Terms of Service
        • Privacy Policy
        • Status
        • Contact Us
        Downloads
        • Releases
        • Source code
        • License
        Docs
        • Tutorials
        • CustomHUD
        • AutoSettings
        • ScriptAPI
        Community
        • Forum
        • Guilded
        • YouTube
        • Twitter
        • D.Tube
        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups