Skip to main content

Fishing scripts

Choose a script for the fishing you want to do:

ScriptCatch handling
Fish AnywhereFish where you stand and clear nearby catches.
Barn FishingCollect catches in a configured pool, then clear them together.
Worm FishingCollect Flaming Worms in a configured pool.
Moonglade Strider Surfer FishingCollect Stridersurfers in a configured pool.

All four start from your current position and casting direction. There is no location picker or route to attach. Stand where you want to fish and face the casting direction before starting.

Hold the rod you want to use. If you are holding something else and have exactly one usable rod in your hotbar, the script selects it. With multiple rods, hold the one you want before starting. Rods elsewhere in your inventory are not moved. Normal Fishing Rods and Challenging Rods are recognized by item ID as well as rod tooltips. Unmet item requirements still prevent selection.

Put usable combat equipment in the hotbar. Automatic weapon choice uses recognized equipment and the current creatures. It does not rearrange your inventory or understand unknown abilities.

The branch needs its paired loader and a Minecraft relaunch. Source tests do not establish that a particular fishing location or weapon works in-game.

HUD priorities

All four scripts use the farming HUD layout. Select bars or line in the HUD graph setting. Lua authors can make the same choice with a chart row's chart_style field; see Show a HUD.

ScriptMain readingSupporting reading
Fish AnywhereFishing XP/hourEstimated loot/hour
Barn FishingFishing XP/hourEstimated loot/hour
Moonglade Strider SurferFishing XP/hourEstimated loot/hour
Worm FishingEstimated loot/hourMembranes/hour

XP displays include session gains, current level, next-level ETA, and a selected level goal up to Fishing 50. Fish Anywhere can emphasize earnings or a supported item goal instead. Worm offers a materials emphasis for Ironman or upgrade grinds: enter the target and any items already owned. Stored sacks and bank contents are not assumed to be known.

Collection rates need two complete batches to warm up. They include collection and combat time and stay labeled as completed-cycle estimates while the next batch builds. Session totals continue updating. ETAs assume the observed pace; missing skill progress or an insufficient XP history leaves them unavailable.

Estimated loot means the sale value of tracked inventory acquisitions, before bait, fees, and other costs. It is not net profit. Unsupported drops and items sent straight to unobserved sacks are excluded. Missing prices are shown rather than filled with guessed values.

Weapon preference

Auto ranks recognized combat weapons and falls back to the selected fishing rod. Prefer tries rod melee first and can fall back after unsuccessful attempts. Never excludes rod attacks. These are left-click attacks; the rod is not cast at a creature.

Dedicated combat weapons take priority over utility weapons: Livid Dagger outranks Aspect of the Void for ordinary melee. Player stats and upgrades can change actual damage, so this is a default preference, not a DPS guarantee. A temporary range, visibility, or resource problem waits within a bounded clear instead of treating an otherwise usable weapon as missing for the whole run.

Run from Lua

Declare world.blocks.read, world.entities.read, inventory, interaction, camera.scan, combat, events.chat.filtered, and profit in your bundle.

local fishing = require("hexis/skyblock/fishing")

function hexis.main()
local result = fishing.run({
mana_reserve = 200,
})
hexis.script.stop({reason = result.message or "Fishing finished"})
end

The library selects a rod at startup and restores that rod when casting. Uncertain catches, protected creatures, low health or air, unexpected position changes, and unusable equipment stop the script with a reason.

Ground area abilities require allow_displacement = true and a ground_target = {x = ..., y = ..., z = ...}. The configured position boundary still applies. The ground target must resolve to solid footing near the start position. Ability use does not promise healing, a shield, damage, or a kill.

Collect creatures in a pool

Barn, Worm, and Moonglade Strider Surfer require a containment box. Supply real coordinates for your setup; these example coordinates are placeholders.

local result = fishing.run({
collect = true,
allowed_species = {["Flaming Worm"] = true},
pool = {
min = {x = 10, y = 65, z = 10},
max = {x = 14, y = 69, z = 14},
},
batch_size = 5,
max_batch_age = 180,
mana_reserve = 200,
})

The collection scripts clear at the configured creature count or age. A dangerous arrival can interrupt collection. Count and age are safety limits, not guarantees about the server cap or despawning. Worm and Moonglade Strider Surfer stop if a recognized catch is outside their supported species.

Vanilla and custom detectors

hexis/fishing accepts a detector factory. Its returned function receives an owned-hook observation and cast age and returns wait, bite, or invalid. Use require("hexis/fishing/vanilla").detector for vanilla bite detection in custom scripts. Hexis does not ship a standalone vanilla fishing script.

The core also needs world_generation, origin, cast, and a rod function that returns a current record from hexis.inventory.items({}). An optional check function returns a stop reason when the run must interrupt an action.

The low-level actions are hexis.fishing.cast, hexis.fishing.reel, and hexis.input.press. Their generated reference lists exact request fields. Cast confirms a new owned hook. Reel requires that exact hook and confirms removal. Neither result confirms loot or XP, and an unconfirmed press is not repeated automatically.

Current limits

These scripts do not travel, restock, sell, validate a hotspot, or discover a capture pool. Moonglade Strider Surfer does not dive, swim back, or follow a breathing route. Low air stops fishing. Trophy fishing is not included.

Catch recognition is limited to the supported message and creature vocabulary. Nearby bobbers, ambiguous bodies, and crowded or incomplete observations can prevent automation. Use the matching branch build for acceptance testing before relying on a script.