ModsJava
AbyssalFishing [1.16+] | 155 Fish, Sizes & Records, Minigame, Tournaments, Auction
Java mod listed for Minecraft 1.16–26.x. Downloads from the MC Java Mods app on Android.
⬇ Download on SpigotAbyssalFishing
155 fish that each have their own length and weight. Everything the paid one does, with no "Pro" edition.
Made by infinity3113 · Minecraft 1.16 – 26.2 · Spigot & Paper
✔ Free — no premium version, no locked features, no licence key. · Java 8+ · 4 languages (EN / ES / FR / ZH)
Full Documentation & Wiki
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Almost every fishing plugin does the same thing: it rolls a name from a list and hands it to you. Two "Salmon" are the same object, worth the same, forever.
Here every catch draws its own size. A length in centimetres and a weight in kilos, pulled from a curve biased towards the small end — so most come out ordinary, and the huge one is genuinely rare.
That one decision is what makes everything else work. Records are worth chasing, the scales are worth opening, the auction sells your 47.3 cm salmon and not "a salmon", and a trophy is worth multiples of a runt of the same species.
The main menu — everything hangs off here, and it opens with your real odds for each rarity where you are standing.
A note from the author
This plugin is completely free, with no premium version holding features back. If it helps your server:
Thanks for trying AbyssalFishing! — infinity3113
- ⭐ Please leave a review — it genuinely helps other owners find it.
- Found a bug or have an idea? Post it in the thread, or come to Discord — it is quicker for back-and-forth: discord.gg/sBw99njvTU
- ☕ Donations welcome (optional): Donate via PayPal
Click to expand...
Reeling in does not give you the fish. A bar appears with a green zone and a marker sliding back and forth, and you have to click while the marker is inside it.
Code (Text):
-##########--------------|-- miss
-----------###|######------- hit
# = green zone | = marker
The zone lands in a different third of the bar every time, and the marker never starts inside it — so it is never a free catch and never an impossible one.
Not your thing? /fish minigame turns it off for that player, one line in the config turns it off for the whole server, and fishing goes back to normal.
A whole catch, start to finish — the bar when it bites, the species and its size on screen, the announcement in chat, and a burst of particles in the colour of its rarity so everyone nearby sees what came out.
Every catch carries its length, its weight, the date and who pulled it out. Drop one on the scales and you see how it stands against your best and against the whole server.
Beat the longest of a species and it is announced to everyone, and the record keeps the size, the date and the name. That is the part a fishing plugin usually cannot offer, because two of its "Salmon" are the same object.
The scales — your catch against your own best and against the server record.
Leaderboards — cached and refreshed on a timer, never recalculated because somebody opened a menu.
Gutting a fish gives you loot. On its own that loot would just be something else to sell — so it feeds a loop instead. You fish, you gut, you craft the bait, you fish better.
Place a bait station, right-click it, and you get a recipe list that shows what each bait needs and whether you have it, line by line. Left-click crafts one, shift-click crafts as many as you can.
The gutting station — every fish sets its own loot, its own entropy and its own XP.
Code (YAML):
ingredients :
- 'PRISMARINE_SHARD:3' # a plain material
- 'tier:uncommon:2' # two fish of that rarity, any species
- 'fish:sardine:1' # or one specific species
And a plugin fish never counts as its vanilla material, so a recipe asking for a plain COD will not eat the 90 cm one you were keeping.
A market that works in both directions
The auction house is the selling side: you list one specific catch — your 47.3 cm salmon, not "a salmon" — and delivery, payment and expiry all go through the mailbox, so it works whether the buyer is online or not.
The bounty board is the buying side. "I pay 5,000 for a marlin of 200 cm or more."
Code (Text):
/fish bounty post tier:legendary 150 25000
/fish bounty post salmon 0 500
/fish bounty post any 100 1000
The reward is held the moment the bounty is posted, not when it is claimed. Otherwise the poster could spend the money while a hunter spends half an hour looking, and that only has to happen once for nobody to trust the board again.
Show it off: trophies and aquariums
- Trophy cases. A record is a number in a menu, and there it stays. Place a case in your base, right-click it with a fish, and a floating sign above it names the species, the length and who caught it.
- Aquariums. The opposite of a trophy case: several fish at once, taken in turns on the sign above the tank, with a small entropy trickle. Income is set per rarity, so an abyssal is worth more than a common one — and only an owner who is online gets paid, because this is an ornament that pays a little, not a passive farm.
Progression that does not stop at level 30
- Entropy — the plugin's own currency. It cannot be bought. It is only fished.
- Levels & skills — a skill tree bought with level points and entropy. Never lost, never tied to a rod.
- Deliveries — short jobs that generate themselves and scale to level. A level 3 player is never asked for 40 mythical fish, and the length asked for comes from the species' real range, so it is never impossible.
Deliveries and the skill tree — jobs that scale to your level, and points that are yours and not your rod's.
- Augments — custom rod enchants. Many are conditional (rain only, night only, full moon only), which is what makes keeping more than one rod worthwhile.
- Baits — drag one onto a rod to attach it. Some fish only bite with their bait.
- Rod condition — line wears when you land a fish, reel wears when you cast. Line at zero snaps now and then; reel at zero speeds the minigame up. It is the one entropy sink that never runs out. Switchable off.
The augment table — drop your rod in, pick an augment, pay in entropy. Hot spot I here: a chance to pull two fish at once, and it goes dead the moment it rains.
- Tides. A global event every so often, announced in advance, that simply makes fishing better for everyone for a while. Not a competition — latecomers benefit too.
- Hotspots. The place where the fish are biting today. One zone gives far more, runs dry, and opens somewhere else. You define the zones with coordinates, so they always land in real, reachable water instead of mid-ocean a thousand blocks from anybody.
- Migrations. Marked species change biome every few world days. The codex already tells you where each fish lives — this makes that hint worth re-reading. The layout is deterministic, so a restart never reshuffles the map mid-season.
The codex — every species, whether you have caught it, your personal best, and a hint about where it lives.
Six ways to score — most fish, biggest fish, most of a rarity, hunt one species, total weight, most entropy — drawn with configurable weights so it is never the same event twice.
The bar at the top shows who is leading, with what, and how long is left, and every player is told their own position as they score. Knowing whether you are second or tenth is what makes the last minute matter.
Small things that come from actually running one:
- In "biggest fish", scores do not add up — your best stands. Otherwise it would reward whoever fishes most, which is the opposite of what it says on the tin.
- A random rarity hunt never picks the rarest tier. A tournament where nobody scores is an hour wasted.
- Not enough players online? The slot is not skipped — it retries in a minute.
- Everyone who scored gets something, so it does not become the same four people every week.
- Won a tournament while offline? The prize waits in your mailbox.
- Prefer it on your scoreboard? show-bar: false hides the bar, and nothing is lost — the time, the leader, your position, your score and the head count all exist as placeholders.
Every catch by a member feeds the guild, and the guild's level buffs everyone in it. The light fisher feels what the others do; the heavy one has a reason to bring people along. Totems do the same in a smaller way: placeable blocks that buff everyone fishing within a radius, so people fish together.
A market that reacts
Prices are not fixed. Each species has a saturation that rises as it is sold and decays on its own. Sell a hundred salmon in a row and salmon is worth less for a while.
That is what stops the whole server finding the single most profitable fish and farming it forever. The shop menu shows you which species are currently depressed, so it is information, not a nasty surprise. One line turns it off.
The shop — sell your catch, and buy baits, totems, bait stations and aquariums.
The fish bag — 54 slots by default, and it can fill itself while you fish.
This is the part most plugins get wrong. The language is not a server setting — each player picks their own with /fish lang, and gets the menus, the fish lore and the tournament announcements in it. The same tournament is announced in Spanish to one player and in Chinese to the next, on the same timeline.
Ships with EN / ES / FR / ZH, all four complete — 551 keys each, none missing. Add your own by dropping another file in lang/, and your edits survive plugin updates.
Each player picks their own language, and the whole plugin follows them.
- 155 fish, every one a different size — across 6 rarities you can rename, remove or add to.
- Tension minigame — the bite is not the catch. Switchable off per player and server-wide.
- Server records and 9 leaderboards — broadcast when beaten.
- Tournaments — six scoring modes, drawn with configurable weights.
- Tides, hotspots and migrations — a global buff event, a zone where the fish are biting today, and species that change biome as the season turns.
- Levels, skills and entropy — a currency you cannot buy, only fish.
- Augments, baits and rod condition — conditional enchants, baits certain fish will not bite without, and line and reel that wear.
- Bait station — craft bait from what gutting leaves you.
- Deliveries — short jobs that generate themselves and scale to level.
- Auction house and bounty board — the selling side and the buying side.
- Guilds and totems — reasons to fish together.
- Trophy cases and aquariums — no hologram plugin needed.
- Codex — every species, your personal best, and a hint about where it lives.
- Dynamic market — prices sag as a species is over-sold and recover on their own.
- Mailbox — prizes and payments wait for offline players, across restarts.
- One language per player — EN / ES / FR / ZH, all complete.
- 112 PlaceholderAPI placeholders — 100 fixed plus 12 that take an argument. Enough to drive a whole scoreboard, tournament included.
- mcMMO aware — Treasure Hunter and the catalogue coexist without either eating the other's loot.
- SQLite, MySQL or plain YAML — zero setup by default, MySQL for a network.
- One jar from 1.16 to 26.2 — verified against both ends every build, not "should work".
Rarities are not hardcoded. Want four tiers instead of six? Fifteen? Rename them? It is all in tiers.yml, and every fish just points at one.
Every fish sets its own conditions, its own gutting loot and its own sell price:
Spoiler: One fish, every option it has
frost_marlin:
display : '&9Frost marlin'
tier : rare
biomes : [frozen_ocean, cold_ocean ]
time : any # any | day | night
weather : thunder # any | clear | rain | thunder
moon-phases : [0 ] # 0 = full moon
min-y : 40
max-y : 63
required-level : 15
required-bait : shrimp
regions : [my_region ] # WorldGuard
weight : 60 # weight WITHIN its rarity
length : { min : 90, max : 300 }
weight-factor : 0.012
sell-price : 180
sell-size-bonus : 1.5
gut:
entropy : 400
xp : 15
loot :
- 'PRISMARINE_SHARD:1-2:45'
commands : ['25 % eco give %player% 500']
migration:
enabled : true
count : 2
pool : [ocean, cold_ocean, frozen_ocean, deep_ocean ]
An empty list always means
"no restriction", never "impossible" — that is the single most common way a fishing config gets silently broken, and it cannot happen here.
Code (YAML):
frost_marlin:
display : '&9Frost marlin'
tier : rare
biomes : [frozen_ocean, cold_ocean ]
time : any # any | day | night
weather : thunder # any | clear | rain | thunder
moon-phases : [0 ] # 0 = full moon
min-y : 40
max-y : 63
required-level : 15
required-bait : shrimp
regions : [my_region ] # WorldGuard
weight : 60 # weight WITHIN its rarity
length : { min : 90, max : 300 }
weight-factor : 0.012
sell-price : 180
sell-size-bonus : 1.5
gut:
entropy : 400
xp : 15
loot :
- 'PRISMARINE_SHARD:1-2:45'
commands : ['25 % eco give %player% 500']
migration:
enabled : true
count : 2
pool : [ocean, cold_ocean, frozen_ocean, deep_ocean ]
The roll is two-step: rarity first, then species within it. With one big bag, adding twenty common fish to your catalogue would quietly make the mythical ones rarer without anybody touching their odds. This way a rarity keeps its odds no matter how the catalogue grows.
Spoiler: config.yml
language : en # en · es · fr · zh (players can still pick their own)
disabled-worlds : [example_creative_world ]
custom-fish-chance : 100.0 # % of catches that are custom fish
catch-cooldown-ms : 0
luck-of-the-sea-bonus : 0.08 # per enchant level
drop-when-full : true
storage:
type : SQLITE # SQLITE · MYSQL · YAML
table-prefix : 'af_'
autosave-minutes : 5
minigame:
enabled : true
seconds : 8
zone : { easy : 0.34, hard : 0.12 } # green zone, common -> abyssal
speed : { easy : 0.030, hard : 0.075 } # marker speed
bar-length : 28
zone-placement : THIRDS # THIRDS · RANDOM · CENTER
grace-ticks : 6 # ignores the click that started it
accuracy-bonus : 0.25 # up to +25% size on a perfect hit
particles:
enabled : true
surface-scan : 6 # draws the burst above the water, not under it
records:
broadcast : true
levels:
max-level : 100
formula : { base : 120.0, exponent : 1.45 }
skill-points-per-level : 1
rewards : # entropy, skill points, messages, commands
5 : { entropy : 500 }
10 : { entropy : 2000, skill-points : 2 }
shop:
base-price : 20.0
size-bonus : 1.5 # how much the size is worth
entropy-per-coin : 1.0 # used when there is no Vault economy
dynamic-pricing:
enabled : true
elasticity : 0.004
min-factor : 0.35 # a species never drops below 35% of its price
recovery-per-minute : 4.0
anti-afk:
enabled : true
catches-before-penalty : 40
mode : REDUCE # REDUCE · BLOCK
reduced-multiplier : 0.25
leaderboards : { size : 10, refresh-minutes : 5 }
Every file is
fully commented and
updates itself: new options from an update land in your file with their documentation, and everything you changed stays exactly as you left it. You never need to wipe the folder.
Code (YAML):
language : en # en · es · fr · zh (players can still pick their own)
disabled-worlds : [example_creative_world ]
custom-fish-chance : 100.0 # % of catches that are custom fish
catch-cooldown-ms : 0
luck-of-the-sea-bonus : 0.08 # per enchant level
drop-when-full : true
storage:
type : SQLITE # SQLITE · MYSQL · YAML
table-prefix : 'af_'
autosave-minutes : 5
minigame:
enabled : true
seconds : 8
zone : { easy : 0.34, hard : 0.12 } # green zone, common -> abyssal
speed : { easy : 0.030, hard : 0.075 } # marker speed
bar-length : 28
zone-placement : THIRDS # THIRDS · RANDOM · CENTER
grace-ticks : 6 # ignores the click that started it
accuracy-bonus : 0.25 # up to +25% size on a perfect hit
particles:
enabled : true
surface-scan : 6 # draws the burst above the water, not under it
records:
broadcast : true
levels:
max-level : 100
formula : { base : 120.0, exponent : 1.45 }
skill-points-per-level : 1
rewards : # entropy, skill points, messages, commands
5 : { entropy : 500 }
10 : { entropy : 2000, skill-points : 2 }
shop:
base-price : 20.0
size-bonus : 1.5 # how much the size is worth
entropy-per-coin : 1.0 # used when there is no Vault economy
dynamic-pricing:
enabled : true
elasticity : 0.004
min-factor : 0.35 # a species never drops below 35% of its price
recovery-per-minute : 4.0
anti-afk:
enabled : true
catches-before-penalty : 40
mode : REDUCE # REDUCE · BLOCK
reduced-multiplier : 0.25
leaderboards : { size : 10, refresh-minutes : 5 }
️ Anti-AFK that does not punish humans
Nobody gets penalised 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.
⚡ Built to not lag
- Nothing touches the database on the main thread. Loading a profile, saving it, reading a leaderboard and building the top index all happen on a background thread.
- Leaderboards are cached and refreshed on a timer you set, not recalculated every time somebody opens a menu.
- Floating signs are ArmorStands the plugin owns — never written into your world file. Remove the plugin and no ghosts are left behind.
- The catalogue is indexed by rarity at startup, so a catch is a lookup and not a scan of 155 fish.
- Particles only fire on a catch, and are placed with a short upward scan capped at 6 blocks — no per-tick effects anywhere.
None are required. The plugin runs alone with SQLite and its own currency.
- Vault (optional) — fish sell for real money. Without it they sell for entropy, and nothing breaks.
- PlaceholderAPI (optional) — 100 fixed placeholders plus 12 that take an argument. /fish placeholders dumps the whole list in game.
- WorldGuard (optional) — a fish can require a region to be catchable.
- mcMMO (optional) — the two share the water properly. Treasure Hunter keeps paying out alongside your catch instead of losing its drop to it, and your mcMMO Fishing level adds luck to the roll here. Three modes in mcmmo.yml, and no mcMMO classes in the jar.
- MySQL (optional) — share progress, records and leaderboards across a network.
Not "should work". It is compiled against the oldest supported API so the compiler itself refuses anything 1.16 does not have, and everything newer goes through a compatibility layer. Both ends are checked every build: the same source compiles against 1.16.5 and against 26.2, and every single API reference in the finished jar is verified to still exist in 26.2.
It is compiled to Java 8 on purpose, because a 1.16 server may well be running on Java 8 and a Java 17 class simply will not load there.
How players use it
- Just fish. Any rod, any water. No command to learn first.
- Click when it bites → the bar appears, click again with the marker in the green
- /fish → the main menu: odds where you stand, bag, codex, shop, skills
- Right-click a trophy case or an aquarium with a fish → it goes on display with your name on it
- Drag a bait onto your rod → attached. Drop a rod on the augment table → enchanted.
- Drop a fish on the scales → how it compares to your best and to the server's
Base: /fish · aliases /af, /abyssalfishing — everything has Tab completion.
Players
- /fish menu — the main menu · /fish shop — sell your catch
- /fish bag — your fish bag · /fish codex — the species catalogue
- /fish stats · /fish top · /fish entropy — your numbers and the leaderboards
- /fish skills — the skill tree · /fish augment — the augment table
- /fish gut · /fish scales — gut a fish, or weigh one
- /fish baitstation — buy a bait station · /fish aquarium — buy an aquarium
- /fish deliveries — your active jobs · /fish mailbox — pending rewards
- /fish auction — the auction house · /fish bounty — the bounty board
- /fish bounty post <fish|tier:x|any> <cm> <reward> — post one
- /fish guild — create, invite, join, leave · /fish trophy — buy a trophy case
- /fish repair — fix your line and reel
- /fish tide · /fish hotspot — what is running and where
- /fish boosters — what is currently boosting you and for how long
- /fish minigame — turn the minigame off (or back on) for yourself
- /fish lang — pick your own language · /fish help
- /fishtournament info | top | time | types — aliases /ft, /tournament
- /fish give <player> <fish> [amount] [length] — hand out a specific fish, at a size you choose
- /fish givebait · /fish giveaugment · /fish givetotem
- /fish addentropy · /fish addxp · /fish setlevel
- /fish booster — start a server-wide boost
- /fish event — force a tide or a hotspot right now
- /fish info — what is loaded, plus the raw state of the rod in your hand
- /fish placeholders — every placeholder, printed in game
- /fish reload — reload config, catalogue and language files
- /fishtournament start <type> | stop | cancel | remove
- abyssalfishing.player.* — everything a normal player uses (default: true)
- abyssalfishing.use — catch custom fish at all (default: true)
- abyssalfishing.auction · abyssalfishing.bounty · abyssalfishing.guild (default: true)
- abyssalfishing.trophy · abyssalfishing.aquarium · abyssalfishing.baitstation (default: true)
- abyssalfishing.totem.place — place fishing totems (default: true)
- abyssalfishing.lang — pick your own language (default: true)
- abyssalfishing.codex.hide — stay out of the public records (default: false)
- abyssalfishing.bypass.afk · abyssalfishing.bypass.cooldown (default: op)
- abyssalfishing.*.break.other — break other players' trophy cases, aquariums, bait stations and totems (default: op)
- abyssalfishing.tournament.manage — start, stop and manage tournaments (default: op)
- abyssalfishing.admin — the admin commands (default: op)
- abyssalfishing.* — everything (default: op)
Installation
- Drop the jar into your /plugins folder.
- Restart the server. Don't use /reload.
- Check the console for Catalogue loaded: 155 fish across 6 rarities. and you're done.
- No dependencies required — add Vault later if you want fish to sell for money.
Need a hand?
Bugs, questions about the config, or an idea for the catalogue — the fastest way to reach me is Discord:
The discussion thread here works just as well; I read both. A console error and your config.yml get it fixed fastest — and /fish info prints most of what I would ask you for.
❓ Why is this free?
Because a fishing plugin should not cost more than the server it runs on. There is no premium edition, no locked features and no licence check. What you download is what is documented.
If it is useful, a rating and a review help more than money does.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Licence & Terms
AbyssalFishing is free, but it is not public domain. It remains the work of infinity3113.
You MAY:
- Use it on any server or network, public or private, with no player limit.
- Use it on a server that charges its players (ranks, donations, shops). What you may not charge for is the plugin itself.
- Edit the configuration and language files however you like.
- Translate the language files and share those translations.
- Re-upload or mirror the plugin on any site, marketplace, Discord, forum or file host. Please link to this page instead.
- Sell it, or include it in any paid package, bundle, "plugin pack", server setup or hosting offer.
- Decompile, deobfuscate, reverse-engineer or republish its source code.
- Remove or alter the author credits, the plugin name or the licence notice.
- Claim authorship of it, or present a modified copy as your own work.
Provided "as is", without warranty of any kind. The author is not liable for any damage, downtime or data loss arising from its use.
Full terms: infinity3113.mc-paradise.com/plugins/terminos.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
More plugins by infinity3113
https://infinity3113.mc-paradise.com/plugins
Minecraft 1.16 – 26.2 · Java 8+ · Spigot & Paper · No dependencies · 4 languages · By infinity3113
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.16, 1.17, 1.18
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
AbyssalFishing [1.16+] | 155 Fish, Sizes & Records, Minigame, Tournaments, Auction is a free Minecraft Java mod. Compatible with Minecraft 1.16, 1.17, 1.18, 1.19 and newer. Downloaded 237 times (via Spigot). Download it and open it directly in the game.