AbyssalFishing
A complete fishing system: 155 fish with their own length and weight, a tension minigame when one bites, entropy, levels, skills, augments, baits, deliveries, tournaments, tides, hotspots, an auction house and guilds. Free, no premium edition.
What makes it different
Almost every fishing plugin does the same thing: it rolls a fish from a list and hands it to you. Here every catch is unique — it has its own length in centimetres and weight in kilos, drawn from a curve biased towards the small end. That is what makes a server record actually cost something, what makes the scales worth opening, and what makes an auction where you do not sell "a salmon" but your 47.3 cm salmon.
| The usual | AbyssalFishing |
|---|---|
| One language for the whole server | Per-player language with /fish lang. Menus, fish lore and tournament announcements, each in their own. |
| It bites and it is caught | Tension minigame: a bar with a green zone and a marker. The zone narrows with rarity. |
| Fixed prices | Dynamic market: selling a lot of one species sinks its price, and it recovers on its own. |
| 6 rarities hardcoded | As many as you want in tiers.yml: add, remove or rename. |
| The codex says what you are missing | The codex says where to look: biome, time, weather, moon, bait and level. |
| 1.20+ and that is it | 1.16 through 26.2 with the same jar. Compiled to Java 8 so it also starts on old servers. |
Everything it brings
- 155 fish across 6 rarities, with biome, time, weather, moon phase, height, level and bait as conditions.
- Length, weight and quality per catch, with personal and server records.
- Tension minigame, optional, switchable per player and per server.
- Entropy (its own currency), levels, a skill tree, rod augments and baits.
- Fish bag, codex, shop with a dynamic market, gutting and scales.
- Deliveries that generate themselves, tournaments in 6 flavours, and personal and global boosters.
- Totems, trophy cases with a floating sign, rotating hotspots and global tides.
- Migrations: fish change biome every few world days.
- Player auction house and guilds with shared progress.
- Mailbox: nothing is lost for being offline.
- PlaceholderAPI with over 100 placeholders, optional Vault and WorldGuard.
Installation
- Drop the jar into plugins/Works on Spigot and Paper, 1.16 through 26.2. It needs neither Vault nor anything else to run.
- Restart the serverIt creates
config.yml, the fish catalogues and the four languages. Do not use /reload: restart. - (Optional) Vault and PlaceholderAPIWith Vault fish sell for money; without it, for entropy. With PlaceholderAPI you get the placeholders for your scoreboard.
What gets created
plugins/AbyssalFishing/
# general settings
config.yml
# catalogue
tiers.yml rarities
fish.yml 54 fish
fish/oceans.yml 41 saltwater
fish/inland.yml 35 freshwater
fish/depths.yml 25 Nether, End and the deep
# systems
augments.yml baits.yml skills.yml
deliveries.yml tournaments.yml totems.yml
boosters.yml rods.yml tides.yml
hotspots.yml migrations.yml
trophies.yml auction.yml guilds.yml
# languages
lang/en.yml lang/es.yml lang/fr.yml lang/zh.ymlStorage
SQLite by default, which needs nothing. There is also MySQL (for several servers) and YAML (one file per player). You switch it in config.yml and touch nothing else.
storage:
# SQLITE (recommended), MYSQL or YAML
type: SQLITE
table-prefix: 'af_'
autosave-minutes: 5
sqlite:
file: data.db
mysql:
host: localhost
port: 3306
database: minecraft
user: root
password: ''
ssl: falseHow fishing works
You cast as always. When something bites and you reel in you do not get the fish yet: a bar appears at the top with a green zone and a marker sliding back and forth. You have to click while the marker is inside the green.
Minigame bar
-##########--------------|-- miss
-----------###|######----- -- hit
# = green zone | = marker- The zone narrows and the marker speeds up with the rarity of what bit. A common fish is easy; an abyssal one is genuinely hard.
- The zone lands somewhere different every time (left, centre or right) and the marker never starts inside it.
- Nailing the centre gives up to +25% reward.
- It can be switched off with
/fish minigame(per player) or in the config (whole server).
Length, weight and quality
Every catch draws a length from a curve biased downwards: most come out ordinary and the huge specimen is genuinely rare. Weight is derived from length, and quality is the percentile within that species' range.
| Quality | Percentile | What it means |
|---|---|---|
| Tiny | 0 – 35% | Run of the mill |
| Average | 35 – 70% | The usual |
| Large | 70 – 90% | A good one |
| Trophy | 90 – 98% | Counts as a trophy and cannot be eaten by accident |
| Colossal | 98 – 100% | Server record material |
Catch particles
When the fish comes out a ring is drawn on the water, in the colour of its rarity. You can see from a distance what the guy next to you landed. The colour comes from the tier's own color:, so changing it drags the particles along.
Against AFK farms
Nobody is punished for standing still for a while. It takes many catches in a row on exactly the same block, which is what a machine does and a person does not. From there rewards are reduced (or cut off, your choice).
Configuring fish
Fish live in fish.yml and in any .yml inside the fish/ folder. All of them load, so you can split your catalogue: with two hundred species a single file of thousands of lines is unmaintainable, and one bad indent takes the whole catalogue down.
One fish, fully
fish:
frost_marlin:
display: '&9Frost marlin'
tier: rare # a rarity from tiers.yml
material: COD # base item
model-data: 1043 # CustomModelData (0 = no model)
description:
- '&8The tip of its bill cuts ice.'
# --- when it bites ---
biomes: [frozen_ocean, cold_ocean]
time: any # any | day | night
weather: any # any | clear | rain | thunder
min-y: 40
max-y: 63
moon-phases: [0] # 0 = full moon
required-level: 15
required-bait: shrimp
worlds: [world]
regions: [my_region] # with WorldGuard
event: crabmas # /fish event crabmas
# --- roll and sizes ---
weight: 60 # weight WITHIN its rarity
length: { min: 90, max: 300 } # in cm
length.bias: 2.2 # >1 pushes towards small
weight-factor: 0.012 # kg = length³ × factor / 1000
# --- rewards ---
xp: 55 # -1 = use the rarity's
entropy: 320
sell-price: 180
sell-size-bonus: 1.5 # how much size pays
gut:
entropy: 400
xp: 15
size-bonus: 1.0
loot: # MATERIAL:amount:chance
- 'PRISMARINE_SHARD:1-2:45'
commands: ['25% eco give %player% 500']
# --- behaviour ---
sellable: true
gutable: true
deliverable: true # can appear in deliveries
give-item: true # false = gives no item
glowing: false
eat: { hunger: 4, saturation: 2.0 }
commands:
catch: ['10% broadcast &b%player% landed something rare']
sell: []
eat: []
# --- migration (optional) ---
migration:
enabled: true
count: 2 # how many biomes at once
pool: [ocean, cold_ocean, frozen_ocean, deep_ocean]biomes out and the fish can bite anywhere.Rarities (tiers.yml)
Rarities are not hardcoded. Add, remove or rename as many as you like; the only rule is that every fish points at one that exists. The rarity's weight is the number that actually decides how rare each tier is.
tiers:
rare:
display: 'Rare'
color: '&9' # also tints its particles
order: 2 # 0 = the most common
weight: 150.0 # weight in the roll
entropy: { catch: 320, gut: 260 }
xp: 55
sell-multiplier: 5.0
gutable: true
glowing: false
broadcast: false # announce to the whole server
sound: ENTITY_EXPERIENCE_ORB_PICKUP
particles:
enabled: true
shape: RING # RING | SPIRAL | BURST | NONE
type: DUST
color: '' # empty = the tier colour
radius: 1.1
rings: 2
points: 32
expand: 0.45
snap-to-surface: true # stick to the water surface
y-offset: 0.50
duration: 20
interval: 2How the roll works
The roll happens in two steps: first the rarity, then the species inside it. The difference matters: with one big bag, adding twenty common fish would make the mythical ones rarer without anyone touching their odds. In two steps, a rarity keeps its odds no matter what happens to the catalogue.
Entropy, levels and gear
Entropy
Entropy is the plugin's own currency and cannot be bought: it is only fished. You earn it catching and gutting, and you spend it on skills, augments, baits, totems, trophy cases, rod repairs and founding guilds.
Levels and experience
The XP stored is always the running total, not what is left to the next level. That way the XP leaderboard means something and changing the formula moves everyone consistently, instead of leaving profiles with impossible numbers.
levels:
max-level: 100
formula:
base: 120.0
exponent: 1.45 # XP from N to N+1 = base × N^exponent
skill-points-per-level: 1
title: true # on-screen title on level up
sound: ENTITY_PLAYER_LEVELUP
# one-off rewards per level
rewards:
25:
skill-points: 3
entropy: 10000
commands:
- 'fish givebait %player% shrimp 8'
message:
- '&b&lLEVEL 25 &7- have some bait.'Effects: the shared language
Skills, augments, baits, totems, boosters, tides, hotspots and guilds all produce the same thing: a set of named effects. That is why they are configured alike and why the player sees the same names on every screen.
| Effect | What it does |
|---|---|
luck | Pushes the roll towards higher rarities |
double-catch | % chance of two fish in one pull |
size | Flattens the size curve: bigger catches. Never raises the species maximum. |
xp / entropy / money | Reward multipliers |
gut | Gutting entropy multiplier |
bait-save | % chance of not consuming the bait |
minigame-ease | Widens the minigame's green zone |
tier.<id> | Multiplies that rarity's weight |
fish.<id> | Multiplies that species' weight |
Skills, augments and baits
- Skills (
skills.yml): levelled with skill points and entropy. Never lost, never tied to a rod — this is "account" progression. - Augments (
augments.yml): custom rod enchants. Crafted with entropy, applied to one specific rod, removable. Many have conditions (rain only, night only), which is what makes keeping more than one rod worthwhile. - Baits (
baits.yml): attached by dragging the bait onto the rod in your inventory. They last a number of uses and bias what bites. Some fish only bite with their bait.
Rod condition
A rod has a line (worn when you land a fish) and a reel (worn when you cast). With the line at zero it snaps now and then and the fish escapes; with the reel at zero the minigame runs faster. Repair with /fish repair, paid in entropy.
rods.yml → enabled: false and rods never wear.The systems
Each has its own file and every one can be switched off on its own with enabled: false. Turn on only what suits your server.
| System | File | What it brings |
|---|---|---|
| Deliveries | deliveries.yml | Short objectives that generate themselves and scale to level |
| Tournaments | tournaments.yml | 6 scoring modes, automatic or manual |
| Tides | tides.yml | Recurring global event with advance warning |
| Hotspots | hotspots.yml | Zones that take turns being open and then run dry |
| Migrations | migrations.yml | Fish change biome every few days |
| Trophy cases | trophies.yml | Block + floating sign with the mounted catch |
| Auction | auction.yml | Selling specific catches between players |
| Guilds | guilds.yml | Shared progress; the group level buffs everyone |
| Totems | totems.yml | Blocks that buff within a radius |
| Boosters | boosters.yml | Temporary multipliers, personal and global |
Deliveries
Short objectives that give a reason to fish for something you would not otherwise. They generate themselves and scale to level: a level 3 player is not asked for "catch 40 mythical fish", and a level 80 one is not handed jobs they finish without noticing. Four types: N fish of anything, N of a rarity, N of a species, or one catch over a certain length.
Tournaments
| Mode | How it scores |
|---|---|
MOST_FISH | Number of fish |
BIGGEST_FISH | The longest catch. Not additive: your best stands. |
MOST_TIER | Fish of a drawn rarity |
SPECIES_HUNT | Fish of a drawn species |
TOTAL_WEIGHT | Total accumulated weight |
MOST_ENTROPY | Entropy earned during the tournament |
- The bar at the top shows who is leading, with how much, and how long is left, and each player is told their position as they score. Knowing whether you are second or tenth is what makes the last minute matter.
- In
MOST_TIERwith arandomtarget, the highest rarity is never picked: a mythical tournament where nobody scores is not a tournament, it is an hour wasted. - If there are not enough players the slot is not wasted: it retries in a minute instead of waiting another two hours.
- Everyone who scored gets something. Paying for participation stops it becoming the same four people every time.
Tides and hotspots
A tide is a global event that is not competitive: for a while, fishing is simply better for everyone. It is announced in advance so people log in on time, but latecomers still benefit.
A hotspot is where the fish are biting today: one zone gives far more for a while, runs dry, and opens somewhere else. You define the zones with coordinates, so they always land in real water and somewhere reachable, instead of appearing mid-ocean a thousand blocks from anybody's base.
spots:
north_bay:
display: '&bNorth Bay'
world: world
x: 200
z: -350
radius: 45
kinds:
legendary:
display: '&5&lDeep trench'
weight: 15.0
duration: 12m
effects:
luck: 0.40
tier.legendary: 0.70
tier.abyssal: 1.00Migrations
Fish marked with migration change biome every few world days. The codex already shows where each one lives; this makes that hint alive and worth re-reading, instead of a table you learn once and forget.
Trophy cases
A record is a number inside a menu, and there it stays. The trophy case brings it into the world: buy it with /fish trophy, place it in your base, and a floating sign sits above it with the species, the length and who caught it.
| Action | What it does |
|---|---|
| Right-click with a fish | Mounts it and the sign appears |
| Right-click empty-handed | Reads the details |
| Sneak + right-click | Takes it off and gives it back |
| Break the block | Returns the case and the fish |
Auction and mailbox
The auction works precisely because every catch is unique: you do not sell "a salmon" here, you sell YOUR 47.3 cm salmon. List with /fish auction sell <price> holding the fish, buy from the menu.
Guilds
Every catch by a member adds points to the guild, and the guild levels up, buffing everyone. The point is that the light fisher still feels what the others do, and the heavy one has a reason to bring people along.
/fish guild create
/fish guild invite
/fish guild join
/fish guild leave
/fish guild kick
/fish guild disband
/fish guild info
/fish guild top Commands and permissions
The main command is /fish (aliases /af, /pesca, /peche). Everything has tab completion, and /fish help only shows what that player can actually use.
Players
| Command | What it does | Permission |
|---|---|---|
/fish | Opens the main menu | abyssalfishing.menu |
/fish help | The help, with version and author | — |
/fish shop | Sell fish, buy baits and totems | abyssalfishing.shop |
/fish bag | Your fish bag | abyssalfishing.bag |
/fish codex | Encyclopedia, hints and records | abyssalfishing.codex |
/fish deliveries | Your active deliveries | abyssalfishing.deliveries |
/fish skills | Skill tree | abyssalfishing.skills |
/fish augment | Augment table: craft, apply and remove | abyssalfishing.augment |
/fish gut | Gut fish | abyssalfishing.gut |
/fish scales | Weigh a catch and compare records | abyssalfishing.scales |
/fish top [stat] | Leaderboards (9 tables) | abyssalfishing.top |
/fish stats [jugador] | Fishing statistics | abyssalfishing.stats |
/fish entropy | Your entropy | abyssalfishing.entropy |
/fish boosters | Your active boosters | abyssalfishing.boosters |
/fish lang [código] | Pick your language | abyssalfishing.lang |
/fish minigame | Toggle the minigame | — |
/fish mailbox | Claim pending rewards | — |
/fish repair | Repair the rod in your hand | — |
/fish auction | Open the auction | abyssalfishing.auction |
/fish auction sell <precio> | List the fish in your hand | abyssalfishing.auction |
/fish guild ... | Guilds (create, invite, join, leave, kick, disband, info, top) | abyssalfishing.guild |
/fish trophy | Buy a trophy case | abyssalfishing.trophy |
/fish hotspot | Where the active hotspot is | — |
/fish tide | Current tide or time to the next | — |
/ft | Tournament: info, top | — |
Administration
| Command | What it does |
|---|---|
/fish reload | Reloads configs and languages without a restart |
/fish give <jugador> <pez> [cantidad] [talla] | Gives a fish, optionally at an exact length |
/fish givebait <jugador> <cebo> [cantidad] | Gives baits |
/fish giveaugment <jugador> <augment> [nivel] | Gives an augment |
/fish givetotem <jugador> <tótem> | Gives a totem |
/fish addentropy <jugador> <cantidad> | Adds entropy |
/fish addxp <jugador> <cantidad> | Adds fishing XP |
/fish setlevel <jugador> <nivel> | Sets the level |
/fish booster <start|stop> <id> [tiempo] | Global booster for the whole server |
/fish event <id|clear> | Turns on a seasonal event |
/fish tide <start|stop> [id] | Starts or stops a tide |
/fish hotspot <start|stop> [zona] [tipo] | Opens or closes a hotspot |
/fish info | Plugin and integration status |
/fish placeholders | Dumps the full placeholder list |
/ft start|stop|cancel|remove | Manage tournaments |
Special permissions
abyssalfishing.admin— all administration.abyssalfishing.tournament.manage— start and stop tournaments.abyssalfishing.bypass.afk— never flagged as AFK fishing.abyssalfishing.bypass.cooldown— no cooldown between catches.abyssalfishing.totem.break.otherandabyssalfishing.trophy.break.other— break other people's.
Placeholders
With PlaceholderAPI installed, everything the plugin knows can be pulled out. If it shows in a plugin menu, it exists as a placeholder. There are over 100 fixed ones and 12 families that take an argument, which on a 155-fish catalogue gives more than two thousand real combinations.
%abyssalfishing_...%. In game, /fish placeholders dumps the whole list grouped by block.Progression
| Placeholder | Returns |
|---|---|
level · max_level | Fishing level and cap |
xp · xp_total · xp_required | XP in level, total, and required |
xp_percent · xp_bar | Percentage and a ready-made bar |
entropy · entropy_compact · entropy_raw | Entropy formatted, abbreviated and raw |
skill_points · skill_<id> | Free points and one skill's level |
caught · caught_vanilla | Plugin catches and vanilla ones |
caught_tier_<rareza> · caught_fish_<pez> | Catches of a rarity or species |
trophies · longest · longest_fish | Trophies and your biggest catch |
records_held | How many server records you currently hold |
money_made · gutted · sold | Money earned, fish gutted and sold |
deliveries · tournaments_won · augments_crafted | Delivery, tournament and augment counters |
language · minigame | Their language and whether the minigame is on |
Codex
| Placeholder | Returns |
|---|---|
discovered · codex_total · codex_missing | Discovered, total and missing |
codex_percent · codex_bar | Percentage and bar |
codex_tier_<rareza> | Discovered of that rarity, as 12/40 |
best_<pez> | Your best length for that species |
fish_total · tiers_total · tier_total_<rareza> | Catalogue sizes |
tier_name_<rareza> | The rarity's coloured name |
chance_<rareza> | The real odds of that rarity where they stand, with bait, augments, skills, tide and hotspot already counted |
Gear
| Placeholder | Returns |
|---|---|
bait · bait_uses | Attached bait and uses left |
rod_line · rod_line_max · rod_line_percent · rod_line_bar | Line condition |
rod_reel · rod_reel_max · rod_reel_percent · rod_reel_bar | Reel condition |
rod_repair_cost · rod_broken | Repair cost and whether it is broken |
rod_augments · rod_augments_max · rod_augment_list | The rod's augments |
boosters · boosters_list | Active boosters |
Systems and guild
| Placeholder | Returns |
|---|---|
mailbox | Rewards waiting in the mailbox |
trophy_cases · trophy_limit | Placed trophy cases and the limit |
auction_listings · auction_mine · auction_max | Auction listings |
deliveries_active · deliveries_slots · deliveries_ready | Active deliveries, slots and ready to claim |
guild_has · guild_name · guild_owner | Whether they have a guild, and which |
guild_level · guild_points · guild_progress · guild_bar | Guild level and progress |
guild_members · guild_max_members · guilds_total | Members and guilds on the server |
guild_top_<1-10>_<name|level|points> | Guild leaderboard |
Tournament, tide, hotspot and migration
| Placeholder | Returns |
|---|---|
tournament_active · tournament_name · tournament_type | Whether a tournament is on, and which |
tournament_time · tournament_time_long · tournament_next | Time left and time to the next |
tournament_position · tournament_score · tournament_players | Your position, your score, how many play |
tournament_<first|second|third>_<name|score> | The live podium |
tide_active · tide_name · tide_time · tide_next | Tide in progress or time to the next |
hotspot_active · hotspot_name · hotspot_kind | Open hotspot and its kind |
hotspot_world · hotspot_x · hotspot_z · hotspot_radius | Exactly where it is |
hotspot_inside · hotspot_distance | Whether they are inside and how far |
migration_days · migration_period · migration_enabled | How long until the next shuffle |
Leaderboards and records
%abyssalfishing_top___%
available stats:
level entropy caught money
trophies longest gutted deliveries
tournaments
examples:
%abyssalfishing_top_longest_1_name%
%abyssalfishing_top_entropy_3_compact%
%abyssalfishing_record__%
example:
%abyssalfishing_record_frost_marlin_holder% config.yml
The basics
# The language new players start on.
# Each player can change it with /fish lang.
language: en
# Worlds where the plugin does NOT act (vanilla fishing).
disabled-worlds:
- creative
# % of bites that are a plugin fish. 100 = all.
custom-fish-chance: 100.0
# Minimum ms between catches. 0 = no limit.
catch-cooldown-ms: 0
# How much each Luck of the Sea level adds.
luck-of-the-sea-bonus: 0.08
# Inventory and bag full: drop on the floor or warn.
drop-when-full: true
# Stops a trophy catch being eaten by accident.
protect-trophies: trueThe minigame
minigame:
enabled: true
seconds: 8 # before it escapes
zone:
easy: 0.34 # width of the green zone
hard: 0.12
speed:
easy: 0.030 # marker speed
hard: 0.075
bar-length: 28
zone-placement: THIRDS # THIRDS | RANDOM | CENTER
grace-ticks: 6 # ticks where a click does not count
accuracy-bonus: 0.25 # extra for nailing the centrezone-placement: THIRDS spreads the zone across thirds (left, centre, right) and draws inside whichever comes up. With plain RANDOM the zone moves but does not look like it: if it covers a third of the bar, its centre lands near the middle almost every time.Dynamic market
Selling a lot of one species sinks its price for a while, and it recovers on its own. That is what stops the whole server finding the most profitable fish and farming it forever. It can be switched off entirely.
shop:
base-price: 20.0 # if the fish sets no sell-price
size-bonus: 1.5 # how much size pays
entropy-per-coin: 1.0 # without Vault it pays in entropy
dynamic-pricing:
enabled: true
elasticity: 0.004 # drop per unit sold
min-factor: 0.35 # floor: never below this
recovery-per-minute: 4.0Anti AFK farm
anti-afk:
enabled: true
catches-before-penalty: 40 # on the SAME block
mode: REDUCE # REDUCE or BLOCK
reduced-multiplier: 0.25Languages
The four languages live in lang/. Language is per player, not per server: the one in the config only decides what a new player starts on. You can add your own by dropping another .yml in that folder.
lang/ folder… unless you want the default texts back.Frequently asked
The fish always escape
Watch the colour of the bar, not the marker: it turns green when you are inside. If it is still hard, raise minigame.seconds and the zone width, or lower speed. Also remember the Steady grip skill and the Steady hands augment widen the zone.
Nothing from the plugin bites
- Are you in a world listed in
disabled-worlds? - Is any fish configured for that biome? If none can bite there, the vanilla fish is left alone instead of giving you nothing. The main menu tells you.
- Is
custom-fish-chancebelow 100?
Does it work on my version?
From 1.16 to 26.2, same jar. It is compiled to Java 8 on purpose, because a 1.16 server may be running on Java 8 and a Java 17 .class will not load there. Anything newer versions need comes in through reflection.
Can I remove systems?
Yes. Every system has its own enabled: false: minigame, rod wear, tides, hotspots, migrations, trophy cases, auction, guilds, deliveries, tournaments and particles. You can leave it at "fishing with nice fish" or turn everything on.
Is it really free?
Yes. No premium edition, no locked features, no licence key. Everything in this wiki is in the jar.
Version history
Every release and what changed in it.
No notes for this version.
Discussion
Comment and share your experience on each plugin version.
Player reviews
What server owners think of this plugin.
No reviews yet.