Fishing Frenzy is a Minecraft plugin for Paper 1.21.8 that adds a timed fishing event with special loot, streak/luck mechanics, and a global meter. It ships as a single shaded JAR (no extra libraries needed).
- Server: Paper 1.21.8 (compatible with modern 1.21.x)
- Java: 21 (LTS)
/frenzy reload— Reloads the plugin configuration/frenzy status— Shows current state (active, time left / time until next)/frenzy start— Starts a frenzy immediately (bypasses meter), and resets the global cooldown/frenzy end— Ends the current frenzy early, if one is active- Permission:
fishingfrenzy.command(default: op)
Commands are declared in plugin.yml (Bukkit-style). This plugin does not use paper-plugin.yml for commands.
- Timed “Frenzy” event with countdowns and boss bar
- Global meter (optional) requiring a number of catches to trigger Frenzy
- Streaks increase luck per catch up to a configurable cap
- Pity system guarantees a spicy drop after N misses during Frenzy
- Weighted loot table with custom names, lore, and enchantments
- Optional "Lucky Rod" that doubles spicy chance during Frenzy
Default config is written to plugins/FishingFrenzy/config.yml on first run. Key options:
frenzy.duration(int, seconds) — Default 90frenzy.cooldown(int, seconds) — Default 3600 (1 hour). For 30 minutes, set to1800.frenzy.per-player-cooldown(int, seconds) — Default 600frenzy.loot-multiplier(double) — Global multiplier applied to chancesfrenzy.mode(string) —global(current)frenzy.allowed-worlds(string list) — Allowed world names; empty = allfrenzy.allowed-biomes(string list) — Allowed biome names; empty = allfrenzy.allowed-times(string list) —DAYand/orNIGHT; empty = bothfrenzy.meter.enabled(bool) — Enable global meterfrenzy.meter.required-fish(int) — Catches required to trigger Frenzyfrenzy.streaks.luck-per-streak(double) — Luck increase per streakfrenzy.streaks.max-streak(int) — Streak capfrenzy.pity-threshold(int) — Guarantee spicy after N missesfrenzy.loot-table(list of items) — Weighted entries with fields:type— Bukkit material name (e.g.,DIAMOND,FISHING_ROD)weight— Relative weight (int)amount— Either a number (e.g.,1) or range stringmin-max(e.g.,2-4)spicy— true/false to mark spicy dropsenchants— List of enchantment names (applies to enchanted book or gear)name— MiniMessage string for display namelore— List of MiniMessage strings for lore
Notes:
- MiniMessage strings must be valid YAML scalars. Quote strings that contain
:or special characters, and ensure tags are balanced (e.g.,"<gradient:gold:yellow>Lucky Rod</gradient>"). - The plugin reads
allowed-biomeseven if it’s not present; keeping it in the config improves clarity.
- YAML parse error on startup
- Typically caused by malformed quotes or unbalanced MiniMessage tags in
config.yml. Delete the server'splugins/FishingFrenzy/config.ymlto regenerate the default, then reapply your changes carefully.
- Typically caused by malformed quotes or unbalanced MiniMessage tags in
- Duplicate boss bars after reload
- Fixed in code: reloading now hides and replaces the boss bar. If you still see two, update the plugin JAR to this build and try
/frenzy reloadagain.
- Fixed in code: reloading now hides and replaces the boss bar. If you still see two, update the plugin JAR to this build and try
- "Does not contain plugin.yml/paper-plugin.yml"
- Remove any non-plugin library JARs from
plugins(Adventure jars). Only keepFishingFrenzy-1.0.0.jar.
- Remove any non-plugin library JARs from
- Command not found
- Ensure you’re using this shaded build and that
plugin.ymlis packaged (it is by default). Check console for enable errors.
- Ensure you’re using this shaded build and that
- Build: shaded via
com.gradleup.shadow(relocates Kyori tocom.example.fishingFrenzy.shaded.*). - Commands: declared in
src/main/resources/plugin.ymland wired viaJavaPlugin#getCommandinFishingFrenzy. - Local test server:
./gradlew.bat runServer(defaults to 1.21; adjust as needed).
Provided as-is. You may modify and redistribute as you wish.