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, a bounty board, a bait station, aquariums 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. 18 of them are caught in Nether lava.
- 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
bounties.yml aquariums.yml
mcmmo.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).
Lava fishing
In vanilla you can only fish in water: a bobber that lands in lava just sinks. And water evaporates in the Nether. Here the bobber floats on the lava, bites the same way it does in water, and you reel in the same way.
- When something bites there is a burst of fire, sparks fly and a notice shows on the action bar. Lava glows and swallows particles: the notice is what you will actually see.
- There is a short window to reel in. Reel in too early or let the window pass and you get nothing; it just waits again, as in water.
- What comes out goes through the same path as in water: roll, minigame, baits, augments, records. Lure shortens the wait too.
- It sounds like lava, not the sea. Not one water sound: the bobber lands with a gloop, pulling it out gives the lava-bucket scoop and a hiss, and the fish sizzles as it cools. If it gets away, it sounds like a fire going out.
fluid: in fish.yml. The 18 Nether fish ship with fluid: lava. The Codex says so too — "Fished in lava" — so nobody has to guess.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)
item-model: 'nexo:frost_marlin'
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
fluid: water # water | lava | any
# --- 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]item-model is the modern alternative to model-data: it points the item at a model by name instead of by number, and it works the same on fish, baits, augments, skills and totems. The two live side by side. It is explained in full under Integrations.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.
The Codex: which hints it shows
The Codex is not a list of what you are missing: it is where to go and look. That is why the conditions you write in fish.yml are shown as hints, and shown on fish you have not discovered yet — if they only appeared after you caught one, they would arrive too late.
| Field | Hint |
|---|---|
biomes | Up to three biomes, then ... |
min-y · max-y | Depth. Reads as a range, a floor or a ceiling depending on what the fish defines, so no half-empty lines. |
moon-phases | Moon phase by name ("Full moon", not 0). A fish listing all eight has no real restriction, so the line is left out. |
fluid | "Fished in lava", or "in lava or water". Nothing for water: that is the normal case. |
time · weather | Time of day and weather |
required-level | Minimum fishing level |
required-bait | The bait, by its display name |
event | The event it needs |
migration | How many days until it moves |
» Where to find it
- Biome: Lush caves, Dripstone caves
- Depth: Y 40 or below
- Moon: Full moon
- Fishing level: 15Entropy, 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: 30.0
exponent: 1.3 # 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 |
| Bait station | baits.yml | Craft bait from what gutting leaves you |
| Bounty board | bounties.yml | A player pays for the catch they are after |
| Aquariums | aquariums.yml | Several live fish on show, with a small income |
Bait station
Gutting a fish gives you loot, and on its own that loot would just be something else to sell. Here it feeds a loop: you fish, you gut, you craft the bait, you fish better. Place the station, right-click it, and you get the recipe list with what each one needs and whether you have it.
worm:
# ...the rest of the bait...
recipe:
amount: 8 # how many come out
entropy: 60 # cost, 0 = free
ingredients:
- 'DIRT:4' # a plain material
- 'tier:common:2' # 2 fish of that rarity
- 'fish:sardine:1' # or one specific speciesThe last two forms are the important ones: they are what gives a small fish a use. A 12 cm one breaks no record, nobody bids on it and selling it gives you loose change — but as raw material it is worth exactly as much as the big one.
COD will not eat the 90 cm cod you were keeping for the display case.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.
show-bar: false in tournaments.yml hides the bar, and you lose nothing: everything it shows exists as a placeholder — the time, the leader, your position, your score and how many are taking part.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 |
Aquariums
A display case shows one fish, your best. The aquarium is the opposite: it holds several and takes turns showing them on the sign above it, and it trickles entropy. It is what makes a small fish worth keeping.
| Action | What it does |
|---|---|
| Right-click with a fish | Puts it in the tank |
| Right-click empty-handed | Tells you how many are inside and how many species |
| Sneak + right-click | Takes out the last one you put in |
| Break the block | Returns the tank and every fish inside |
income:
minutes: 10
# entropy per fish and cycle, BY RARITY
entropy-per-fish:
default: 1.0
common: 1.0
uncommon: 2.0
rare: 4.0
epic: 8.0
legendary: 16.0
abyssal: 30.0
species-bonus: 1.5 # extra per DIFFERENT speciesThe income is set per rarity, using the ids from tiers.yml. Otherwise it would not matter what you put in, and every tank on the server would end up full of sardines. Rename a rarity there and you write it here the same way; a single flat number also works.
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.
Bounty board
The auction house is the selling side. The board is the buying side: "I pay 5,000 for a marlin of 200 cm or more". Ask by species, by rarity, by minimum length or any combination — "any legendary over 150 cm" is how people actually ask.
/fish bounty # open the board
/fish bounty mine # only yours
/fish bounty post tier:legendary 150 25000
/fish bounty post salmon 0 500 # one species, any length
/fish bounty post any 100 1000 # anything, from 100 cmIf you are carrying a fish that fits, the bounty lights up and one click hands it in. The fish goes to the mailbox of whoever posted it, so it works with them offline — which is the normal case, because the bounty has been up for days.
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 [player] | Fishing statistics | abyssalfishing.stats |
/fish entropy | Your entropy | abyssalfishing.entropy |
/fish boosters | Your active boosters | abyssalfishing.boosters |
/fish lang [code] | 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 <price> | 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 baitstation | Buy a bait station | abyssalfishing.baitstation |
/fish aquarium | Buy an aquarium | abyssalfishing.aquarium |
/fish bounty | Opens the bounty board | abyssalfishing.bounty |
/fish bounty post <fish|tier:x|any> <cm> <reward> | Posts a bounty (the reward is held) | abyssalfishing.bounty |
/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 <player> <fish> [amount] [length] | Gives a fish, optionally at an exact length |
/fish givebait <player> <bait> [amount] | Gives baits |
/fish giveaugment <player> <augment> [level] | Gives an augment |
/fish givetotem <player> <totem> | Gives a totem |
/fish addentropy <player> <amount> | Adds entropy |
/fish addxp <player> <amount> | Adds fishing XP |
/fish setlevel <player> <level> | Sets the level |
/fish booster <start|stop> <id> [duration] | 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> [zone] [kind] | 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.other,.trophy.break.other,.aquarium.break.otherand.baitstation.break.other— break what other players have placed.
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 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_<fish> | 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_<fish> | 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 |
show-bar: false in tournaments.yml so you are not showing the same thing twice.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
daily-limit: 0.0 # max money a day from selling (0 = none)
dynamic-pricing:
enabled: true
elasticity: 0.004 # drop per unit sold
min-factor: 0.35 # floor: never below this
recovery-per-minute: 4.0daily-limit puts a daily cap on what each player earns selling fish (it resets at midnight, server time). Lower prices alone cannot keep an economy cheap: whoever fishes eight hours would still earn eight times more. The fish that crosses the cap is paid in full; after that the shop says no until tomorrow, and the fish can still be gutted, kept or auctioned. The sell button shows how much you have sold today.Anti 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.Lava fishing
lava-fishing:
enabled: true
environments: [NETHER] # NETHER, NORMAL, THE_END
requires:
augment: '' # id from augments.yml; '' = any rod
bait: '' # id from baits.yml; '' = no bait
wait-seconds: { min: 8, max: 30 }
lure-seconds-per-level: 5
bite-window-seconds: 1.5 # time to reel in
sounds: # 'sound volume pitch'; several play together
land: ['block.lava.pop 0.7 1.2', 'entity.strider.step_lava 0.6 1.0']
bite: ['block.lava.pop 1.0 0.7', 'item.firecharge.use 0.5 1.3']
reel: ['item.bucket.fill_lava 1.0 0.9', 'block.fire.extinguish 0.4 1.5']
catch: ['block.lava.extinguish 0.8 1.0']
escape: ['entity.generic.extinguish_fire 1.0 0.7'] # [] = no soundrequires turns lava into progression: require an augment or a bait, and a rod without it sinks like in vanilla, with a message saying what is missing. If you set an id that does not exist, the console warns you and lava stays closed until you fix it — better that than opening it to everyone because of a typo.Integrations
None of these are required. The plugin runs on its own, with SQLite and its own currency. What follows is what it gains when you already have these installed.
| Plugin | What it adds |
|---|---|
| Vault | Fish sell for real money. Without it they sell for entropy and nothing breaks. |
| PlaceholderAPI | 112 placeholders. See the placeholders section. |
| WorldGuard | A fish can require a specific region to be catchable. |
| mcMMO | Treasure Hunter drops stop being lost, and its Fishing level grants luck here. |
| MySQL | Progress, records and leaderboards shared across a network. |
mcMMO
Both plugins write to the same place: the item that comes out of the water. Left alone, one overwrites the other silently.
LOWEST mcMMO anti-exploit checks
NORMAL AbyssalFishing rolls the catalogue and hands over the fish
HIGH mcMMO ice fishing
HIGHEST mcMMO processFishing(): decides the treasureAbyssalFishing goes first. And mcMMO delivers its treasure by replacing the caught item, with fishingCatch.setItemStack(treasureDrop) — on an item we have already removed. The treasure evaporates: the player never sees it and mcMMO counts it as delivered.
applyXpGain() sits outside every conditional, so it is awarded on every catch. The only thing being lost was the treasure item.What the integration does
- It rescues the treasure. It is read before it can be lost, handed to the player directly, and the treasure XP is returned too. You keep the fish and the treasure.
- And the other way: your mcMMO Fishing level adds luck to the rarity roll. At the cap, an abyssal goes from 1 in 1666 catches to 1 in 1474.
- No dependency. The jar contains no mcMMO classes at all: it is pure reflection. Without mcMMO installed, nothing is registered.
# mcmmo.yml
treasure: give # give / cancel / ignore
extra-xp:
enabled: false # XP by rarity, ON TOP of its own
level-bonus:
enabled: true
luck-per-10-levels: 0.01
max: 0.15| treasure | What happens |
|---|---|
give | You keep the fish and the treasure. The default. |
cancel | The treasure is dropped; you only get the fish. |
ignore | Nothing is touched and the treasure is lost. The old behaviour, for comparison. |
extra-xp ships off. mcMMO computes its XP from the vanilla material, so a 280 cm abyssal and a sardine are both a Cod and pay the same; this lets rarity count, on top of what it already gives./fish info reports whether the hook attached and to which mcMMO version. If anything about its API is not what we expect, the hook disables itself, says so in the console, and fishing carries on as normal.Resource packs (Nexo, Oraxen, ItemsAdder)
Today's pack generators no longer hand out custom_model_data numbers: every item gets its own named model. Asking one of those servers to invent numbers for 155 fish means keeping two sets of books, and one of them drifts.
So anywhere you could write model-data you can now write item-model: fish, baits, augments, skills and totems. A bare name is assumed to be minecraft:, so item-model: 'brick' points at the game's own brick model.
fish:
frost_marlin:
display: '&9Frost marlin'
material: COD
item-model: 'nexo:frost_marlin' # instead of model-data: 1043item-model writes the vanilla item_model component, so it works the same with any of them or with a resource pack you wrote by hand. There is no dependency on any plugin.item_model component exists from 1.21.4 onwards. On older servers the field is ignored with no error, so one config file still serves 1.16 to 26.2. model-data keeps working exactly as before and the two can be mixed: names for whatever your pack generator owns, numbers for the rest.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.
- ✨minigame.player-toggle in config.yml. Set it to false and nobody can turn the fishing minigame off: the menu button is hidden and /fish minigame refuses.
- ✨Permission abyssalfishing.minigame.toggle (everyone has it by default). Take it away from a group to hide the button and the command only for them, e.g. keep it just for staff.
- 🔧Players who had already turned the minigame off get it back as soon as they lose the choice. Their saved setting is ignored, not erased, so it returns if you allow it again.
- 🔧/fish help and tab completion no longer offer /fish minigame to players who cannot use it.
- 🔧The minigame placeholder (%abyssalfishing_minigame%) now shows whether the minigame is really on for that player, not just their saved setting.
- 🔧Just replace the jar. player-toggle (true) and the new message are added to your config and language files automatically, so nothing changes until you set it to false.
- 🐛The economy could end up unhooked for the whole session and selling silently paid in entropy: AbyssalFishing now waits for the economy to register instead of asking once at startup.
- 🐛tournaments.yml and migrations.yml shipped with a config line stranded inside the header comment, which printed a duplicate key warning in console on every boot.
- 🔧Just replace the jar. If you installed 1.4.0 from scratch you can delete tournaments.yml and migrations.yml to get the tidy comments back; your settings are read the same either way.
- ✨shop.daily-limit - the most money a player can make selling fish per day (resets at midnight). 0 = no limit, the default.
- ✨The shop's sell button shows how much you have sold today against the limit. The counter survives relogs and restarts.
- 🔧The fish that crosses the daily limit is paid in full; after that the shop refuses politely and says when it resets.
- 🐛Selling a stack that could only be partly sold removed the whole stack. Now only the sold fish leave the inventory.
- 🐛The biggest fish weighed absurd amounts (The First Catch up to 290,000 kg). Weights are now realistic: about 14 t at most.
- 🐛The First Catch sold for 250,000 at default prices. It is now 40,000, in line with the other abyssal fish.
- 🐛The levels comment said level 50 needed 78,000 XP; it was 680,000. New default curve: level 50 in ~24 h, level 100 in ~110 h.
- ✨Lava fishing. The bobber now floats on lava instead of sinking: something bites after a while, you get a short window to reel in, and the catch goes through the same roll, minigame and rewards as a wa
- ✨Before this, the 18 Nether fish -- including the Heart of the Nether, the only abyssal fish -- could not be caught in survival, because water evaporates in the Nether.
- ✨New fish field: fluid (water, lava or any). Fish without it are water fish. The 18 Nether fish ship with fluid: lava.
- ✨Lava fishing can require an augment on the rod or a bait loaded on it (lava-fishing.requires in config.yml). By default any rod works. A rod that does not meet the requirement sinks like in vanilla an
- ✨The Codex shows "Fished in lava" on lava fish.
- ✨Lava fishing has its own sounds, with nothing from the water: the bobber landing, the bite, pulling the fish out, landing it and losing it all sound like lava and fire. They are configurable in lava-f
- 🐛Species-hunt tournaments could pick a fish nobody could catch (a Nether fish, or one that only appears during an event that was not running). They now only pick catchable fish.
- 🐛Deliveries could ask newer players for fish they had no way to catch. Same fix.
- 🔧On update, the lava-fishing section is added to config.yml and fluid: lava to the 18 Nether fish, keeping your changes. If you moved a Nether fish to water, set it to fluid: water or fluid: any.
- 🐛A totem destroyed by anything other than a pickaxe stayed on record: it kept counting towards the placement limit, so the player could not place a new one, and it kept buffing the empty spot.
- 🐛Totems are now protected from explosions, fire, pistons and mobs that change blocks (endermen, withers), just as they already were from other players.
- 🐛Lantern totems could be destroyed by anyone by mining the block they stand on or hang from, and the owner lost the item. That block is now protected too; if the owner mines it, they get the totem back
- 🐛Ghost totems already on a server are cleaned up on their own: when a player places a totem, any earlier one whose block is gone frees its slot. The console logs each one. This also covers WorldEdit, /
- 🐛Placing and breaking a totem are now recorded only once the action is final. Before, if a region protection cancelled it afterwards, breaking could give a copy of the totem and placing could register
- 🐛Precision cutting did nothing. Gutting counted your skills and boosters but never the augments on your rod, so an identical fish gave the same entropy with or without the augment.
- 🐛Bait master did nothing. Only the skill tree was checked when deciding whether to spend the bait; the augment was ignored.
- 🐛Money bonuses never applied to any sale. The sell multiplier was calculated and then never used, so the Merchant augment, the Market eye skill and the Market day booster never raised a price.
- 🐛All three have been there since 1.0.0; this is not something a recent update broke.
- 🐛The gutting preview did its own maths and ignored each fish's gut.entropy and gut.size-bonus, so it could show one number and pay another. Preview and payout now use the same calculation.
- 🐛The gutting info showed only the skill bonus; it now shows the full bonus you actually get.
- 🐛The sell-all totals in the shop and the bag now include your money bonus, so the number shown is the number paid.
- 🔧Gutting and selling use the rod in your hand. The main hand wins; an off-hand rod only counts when the main hand is not holding one. Conditional augments are checked where you are standing.
- 🔧Heads-up for server owners: if your economy was balanced without these bonuses, sale prices will rise after updating. Tune the values in augments.yml, skills.yml and boosters.yml if needed.
- 🔧The Codex now shows depth and moon phase. It already listed biome, time, weather, level, bait and event, but not the two conditions a player cannot work out by looking around.
- 🔧In the shipped catalogue 29 of the 155 fish carry one of these: 23 have a depth limit and 6 are tied to a moon phase. The cave blindfish only bites below Y 40, and there was no way to learn that in ga
- 🔧Depth reads as a range, a floor or a ceiling depending on what the fish defines, so there are no half-empty lines.
- 🔧Moon phases are shown by name rather than by number -- "Full moon" instead of 0 -- and all eight are translated in the four languages. A fish that lists all eight has no real restriction, so the line
- 🔧Nothing to configure: it reads the min-y, max-y and moon-phases your fish already have. The twelve new language keys are added to your lang/ files on start and anything you have rewritten is kept.
- ✨item-model: point an item at a model by name instead of by number. Anywhere you could write model-data, you can now write item-model: 'nexo:frost_marlin' instead.
- ✨It sets the vanilla item_model component, so it is not tied to any one plugin: Nexo, Oraxen, ItemsAdder or a hand-written resource pack all work. A bare name is assumed to be minecraft:.
- ✨Available on fish, baits, augments, skills and totems -- every place that took model-data.
- ✨Modern pack generators no longer hand out custom_model_data numbers; every item gets its own model id. Asking those servers to invent numbers for 155 fish means keeping two sets of books, and one of t
- ✨model-data keeps working exactly as before, and both can be used side by side: ids for the fish your pack generator owns, numbers for the rest.
- ✨The item_model component only exists from 1.21.4 onwards. On older servers the field is ignored, so one config file still serves the whole 1.16 to 26.2 range.
- ✨mcMMO integration. If you run both plugins, your Treasure Hunter drops have been disappearing: mcMMO delivers its treasure by replacing the item you caught, and AbyssalFishing had already taken that i
- ✨The treasure now reaches you. AbyssalFishing reads it before it can be lost, hands it over directly, and returns the treasure XP too. You get exactly what mcMMO intended, plus your fish.
- ✨Your mcMMO Fishing level now adds luck to the AbyssalFishing roll. Capped low on purpose: at the cap an abyssal fish goes from about 1 in 1666 catches to 1 in 1474.
- ✨New mcmmo.yml with three treasure modes: give (default, you keep both), cancel (only the fish) and ignore (the old behaviour, for comparison).
- ✨Optional extra Fishing XP by rarity, off by default. mcMMO computes its XP from the vanilla material, so a 280 cm abyssal and a sardine both pay the same; this lets rarity count for the skill as well,
- ✨The jar contains no mcMMO classes: the hook is pure reflection, nothing is registered without mcMMO installed, and it disables itself rather than misbehave if the API is not what it expects. /fish inf
- ✨The tournament boss bar can now be hidden with show-bar: false in tournaments.yml, for servers that would rather put the tournament on their scoreboard. Nothing is lost by hiding it: every piece of th
- 🐛The tournament boss bar no longer stays on screen after the tournament has ended. The bar was emptied of viewers but the object was kept, so anyone joining afterwards was added back onto it and saw a
- 🐛A player joining the server between two tournaments is no longer added to any bar at all.
- 🐛Tournament announcements are no longer repeated in the console. One tournament prints its start, four countdowns, the end and the podium, and players already see all of it in chat. Set log-to-console:
- 🐛Migrations no longer print a console line every world period. Set log-changes: true in migrations.yml if you want it.
- 🐛Both of those date back to 1.0.0, confirmed against the released jar rather than assumed.
- 🔧Startup console output is untouched: what loaded, how many fish, which storage and which integrations are still reported. Only the repeating messages went quiet.
- ✨Bait station. A block you place and craft bait at, with a recipe list that shows what each one needs and whether you have it. Gutting finally leads somewhere: you fish, you gut, you craft the bait, yo
- ✨Bait recipes take three kinds of ingredient: a plain material, a specific species, or any fish of a rarity. That last one is what gives a small fish a use -- a 12 cm cod breaks no record, but as raw m
- ✨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 for the display case.
- ✨Bounty board. The buying side of the market, where the auction house is the selling side: "I pay 5,000 for a marlin of 200 cm or more". Ask by species, by rarity, by minimum length, or any combination
- ✨The bounty reward is held the moment it is posted, not when it is claimed, so a hunter can never spend half an hour on a bounty that turns out to be unfunded. A bounty that expires returns its reward
- ✨Bounties are handed in through the mailbox, so they work whether the player who posted them is online or not.
- ✨Aquariums. A tank that holds several live fish and shows them in turn on a floating sign above it, with an entropy trickle. Where a display case shows your one best fish, the aquarium is what makes a
- ✨Aquarium income is configured per rarity, using the ids from tiers.yml, so an abyssal in the tank is worth more than a common one. A single flat number also works.
- ✨Only an online owner is paid for an aquarium: it is an ornament that pays a little, not a passive farm that fills itself while nobody plays.
- ✨The bait station and the aquarium are sold in /fish shop alongside baits and totems, as well as by command.
- ✨New commands: /fish baitstation, /fish aquarium, /fish bounty, plus /fish bounty post and mine.
- ✨New permissions: abyssalfishing.baitstation, abyssalfishing.aquarium, abyssalfishing.bounty, and the two break.other for the new blocks.
- ✨All of it in the four languages, and all of it configurable: baits.yml gained a station section and per-bait recipes, plus two new files, bounties.yml and aquariums.yml.
- 🔧/fish info now prints the state of the rod you are holding: its line and reel values, how many lore lines the plugin owns and what is actually on the item. It is there to make a bug report take one pa
- 🐛The rod no longer stacks copies of its Line and Reel bars. The lore block was being appended instead of replaced, so a new copy piled up on every cast.
- 🐛Rods that already show the duplicates repair themselves. Nothing to throw away: the next repaint — a cast, an augment, a repair — sweeps out every stale copy, in any language.
- 🐛The same duplication could happen to the augment and the bait blocks on the rod. Both use the same delimiter and both are fixed.
- 🐛A brand-new rod now picks up its line and reel the first time it is used. Writes to an item were skipped whenever it had no metadata yet, which is the state a rod is in straight off the crafting table
- 🐛Fishing with the rod in your off hand now counts. Only the main hand was checked, so an off-hand rod took no wear and never showed its bars.
- 🐛The Line and Reel bars reach the client the moment they change, instead of waiting for something else to make the inventory resync.
- 🔧The rod's lore now has a single owner. The three blocks are written together at the end and counted in the rod's own NBT, instead of being found by an invisible marker line that modern versions do not
- 🐛Language console EN
Discussion
Comment and share your experience on each plugin version.
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
No comments on this version yet — be the first!
Player reviews
What server owners think of this plugin.
No reviews yet.