Gebsfish Wiki

The Ultimate Fishing Expansion for DayZ — 79 catchable species, living bait, real ecology

Workshop Subscribers Mod Version
Steam Workshop · Discord · GitHub

Fish Database

Every catchable species with its default stats. Click a row for full details — weather multipliers, temperature preferences, and prep results. Values shown are the mod defaults; server owners can retune everything in fish.json.

Name Water Method Rarity Optimal °C Meat Activity

Items & Gear

Everything the mod adds beyond the fish themselves.

🎣 Fishing Rods

  • Colored rods — Red, Green, Blue, Purple
  • Repairable with the Fishing Rod Repair Kit (max Worn)
  • Wear on every catch outcome — success or fail

🔪 Fish Knives

  • 6 colors: Blue, Orange, Green, Yellow, Red, Purple
  • +54% durability vs vanilla HuntingKnife
  • 10% faster filleting (configurable)

🧰 Tackle Boxes

  • Small Tackle — compact, holds lures, bait & tools
  • Large Tackle — 12 colors, bigger cargo, holds knives too
  • Medium Tackle — 4 colors
  • Fun Tackle variants — Purple, Yellow, Green, Red

🪣 Bait Containers

  • Worm Container — worms & grubs only; stops them dying
  • Bug Container — insects only; stops them dying, dig-bugs action
  • Bait Bucket — aquatic catches only (minnows, crayfish, shrimp, frogs, salamanders); stops them rotting. Does not hold worms or insects
  • Tackle boxes can carry bait but preserve nothing

🧊 Coolers

  • 12 colors
  • Chills cargo toward -5°C — food freezes, rot stops
  • Pauses live-bait death too

🕸 Bamboo Fishing Net

  • Craftable & repairable with Netting
  • Catches minnows, frogs, salamanders
  • Catches land in its own 4×4 cargo

🛶 Jon Boat

  • Drivable flat-bottomed boat, 5 variants
  • Green/gray aluminum + desert, snow, forest camo
  • Cargo space, chassis/engine/floater damage zones
  • More boat content coming

👕 Angler Clothing

  • Fishing Hats — Blue, Red, Green, Purple
  • Fishing Shirts — Red, Green, Blue, Purple
  • Fishing Gloves — Orange, Blue

🥚 Delicacies

  • Red Caviar — trout & salmon roe
  • Black Caviar — Lake Sturgeon roe
  • Yellow Caviar — Northern Pike roe
  • Lobster Tail & Claws, King/Snow Crab Legs

🔧 Crafting

  • Craft a metal hook from wire + pliers
  • Craft the bamboo net
  • Repair rods & nets (repairs cap at Worn; Ruined is gone for good)

Baits & Lures

Every bait and lure carries a per-fish preference table that biases which fish takes your hook. Worms and insects die about 90 minutes after you find them unless stored in a Worm or Bug Container (or a cooler); small aquatic bait like minnows and shrimp keeps in a Bait Bucket, and the rubber worm never dies. All multipliers are tunable in bait.json.

What should I put on the hook?

Bait / LureHow you get itBest forWeak against
WormDig worms (85% find)Panfish ×2.0, Carp ×2.0, Trout ×1.6Large saltwater ×0.3
Grub WormDigging worms or bugsPanfish ×2.0, Trout & Salmon ×1.8Large saltwater ×0.3
Grasshopper / CricketDig bugs (65% find)Trout & Salmon ×2.0, Frogs/Salamanders ×1.8Pike ×0.4
Rubber WormLoot (never spoils)Bass ×2.5Panfish ×0.6, Carp ×0.4
Live MinnowNet or Bait BucketPike/Musky ×2.5, Walleye ×2.5, Bass ×2.0Carp ×0.4
Red SalamanderNet catchCatfish & bottom feeders ×2.5, Bass/Pike ×2.0Panfish ×0.4
Live ShrimpNet or Bait BucketReef & tropical fish ×2.5, small & medium saltwater ×1.5–1.8Amphibians ×0.4, Pike ×0.5
Spinner Baits (4)LootBass ×2.5, Pike/Musky ×2.3, Walleye ×2.0Carp ×0.3
Spoon Lures (4)LootTrout & Salmon ×2.5, Saltwater ×1.8–2.0Carp ×0.3
Crank / Popper Lures (4)LootAll-rounder — Bass ×2.0, Pike ×1.8Carp ×0.3
Curly Tail Jigs (4)LootBass ×2.2, Walleye ×2.0, Panfish ×1.5Amphibians ×0.5

How the preference system works

When you cast, the mod builds a weighted pool of every fish eligible for your water and method. Each fish's weight is CatchProbability × weather × time-of-day × temperature × bait — so a worm at dawn in a warm pond makes bluegill dramatically more likely than a shark. Unlisted bait/fish pairs default to a neutral ×1.0, and the whole system can be disabled with Enable: 0 in bait.json without losing your tuning.

Systems

Every system is independently toggleable in the $profile:Gebs/ config files. Disabled systems keep their tuned values in JSON with no in-game effect.

🌦 Weather & Time of Day

Per-species Rain/Storm/Dawn/Day/Dusk/Night multipliers. Bass fire up at dawn and dusk, walleye and catfish wake at night, trout chase the rain. Stacked buffs are capped so a stormy night never runs away.

🌕 Moon Phases

Real synodic moon-phase math (Meeus algorithm) from the in-game date. Full-moon nights bite up to +20%, new-moon nights down to -10%. Night-only, independently toggleable.

🌡 Water Temperature

Every species has an optimal temperature and a survivable range. Bass own hot summer days; trout and salmon take over in the cold. A global WaterTempOffset adapts the whole curve to winter or tropical maps.

🕐 Bite-Speed Cycles

Each fish has a 24-hour circadian activity curve. The active pool's aggregate drives how long you wait between bites — night fishing for catfish feels different from noon panfishing.

🪱 Living Bait

Worms, grubs, crickets and grasshoppers die about 90 minutes after you find them. Only a Worm Container, a Bug Container or a cooler pauses that clock — tackle boxes and the Bait Bucket do not. Artificial lures never die.

🧊 Cooler & Freezer

Coolers actively chill cargo to -5°C: rot stops, food freezes. Frozen fish can't be filleted until thawed.

🐺 Predators

Fishing, filleting, failed casts, and net use can each draw wolves or bears (~1% per action by default, per-action configurable). Land-only spawns, optional warning sound for everyone nearby, and a chat warning for whoever caused it.

🪝 Hook Recovery

Roughly 1 in 250 fillets recovers a damaged hook or lure "stuck in the fish." Pool and damage range are configurable.

🥫 Junk Catches

Rods and nets can pull configurable junk — wellies, pots, anything you add — with weighted chances and spawn-damage ranges.

💰 Treasure

Roughly 1 in 5000 catches pulls up a container full of loot. Real fishing rods only — the improvised rod never rolls — and each haul costs the rod a third of its health. Admins define the containers and contents; every slot rolls separately so no two hauls match. Off with a single toggle.

📊 Admin Logging

Timestamped session logs in $profile:Gebs/logs/. Debug level 1 gives per-cast summaries; level 2 prints full per-fish breakdown tables that answer "why isn't fish X spawning."

Crafting & Repair

Every recipe the mod adds. Combine the two ingredients the normal DayZ way — drag one onto the other, or hold them and use the craft prompt. Tools listed as not consumed stay in your inventory but take durability.

Crafting

MakeCombineAlso needNotes
Wooden Fish Mount Wooden Plank + Metal Wire Hacksaw (not consumed) Both materials are used up. The craft is refused if you aren't carrying a hacksaw; it takes durability instead of being consumed
Metal Hook Metal Wire or Barbed Wire + Pliers — Wire is used up, pliers are not. Either wire type works
Bamboo Fishing Net Long Wooden Stick + Netting — Both used up

Repair

RepairCombineNotes
Fishing Rod Fishing Rod Repair Kit + the rod The kit is not consumed — it takes durability and can be reused until it wears out
Bamboo Fishing Net Netting + the damaged net One netting consumed per repair. Restores a damaged net to Worn

Preparing Your Catch

Gutting isn't a craft recipe in the usual sense — combine any knife with a fish to fillet it. What you get depends on the species:

The gebsfish fish knives (six colours) work like any knife but fillet faster, by a server-configurable multiplier.

Finding Bait

Two gathering actions, both configurable and both able to come up empty:

Both wear the tool and train soft skills on every completed dig, whether or not you find anything.

Server Toggles

Every recipe above can be switched off individually under RecipeToggles in general.json:

Config keyControls
CraftFishMountWooden Fish Mount
CraftHookFromWireMetal Hook from wire
CraftBambooFishingNetBamboo Fishing Net
RepairFishingPoleFishing rod repair
RepairBambooFishingNetBamboo net repair

Fish prep and fillet recipes are not controlled here — use each species' ResultMain in fish.json instead. Setting it to an empty string makes that species catch-only.

Full Guide

Everything the mod does, how it fits together, and every gotcha worth knowing before it surprises you. If you only read one part, read Caveats & Gotchas at the bottom. If you want to know exactly why you caught what you caught, read The Odds, In Detail.

1. Getting Started

Gebsfish needs Community Framework (CF) loaded alongside it, on both the server and the client. Nothing else is required.

To catch your first fish you need a rod, a hook, and bait. Assemble the rod, attach a hook, put bait on the hook, then face water and use the rod. Traps and nets are separate paths that need no rod at all.

2. Catching Fish

The three methods

What actually decides what bites

Every cast builds a weighted pool from the 79 species. A fish has to clear three gates before it can even enter that pool:

  1. Environment — 1 pond/freshwater, 2 sea/saltwater, 3 both. A sea fish will never appear in a pond.
  2. Catch method — a bitmask you add together: 1 rod + 2 large trap + 4 small trap. So 3 = rod and large trap, 7 = everything.
  3. Catch probability — a 0–25 abundance weight. 0 means uncatchable, which is how you retire a species without deleting it.

Once a fish is in the pool, these multiply its odds:

Bite speed is separate from what you catch — it controls how long you wait. Each species carries a 24-hour activity curve, and the active pool's aggregate sets the delay between bites. Night fishing for catfish genuinely feels different from midday panfishing.

3. The Odds, In Detail

This section is the arithmetic behind every catch — the real formulas, the real percentages, and the reasoning that produces them. Every number here is computed from the shipped default config, so if you have edited fish.json or junk.json your server's numbers will differ. The method is identical either way.

The one thing to understand first

Two completely separate systems are running, and almost every "the multipliers don't work" report comes from conflating them:

QuestionAnswered byUsesRolled
How long until something bites?ModifySignalProbabilityThe global multipliers in WeatherSettings — one set of numbers for the whole serverEvery signal cycle, continuously
What is on the end of the line?GenerateResultThe per-species multipliers in fish.json, plus baitOnce, the moment you cast
You cast — both tracks below start here WHAT you will catch decided once, right now WHEN it bites re-rolled every cycle 1. Eligibility gates environment, catch method, probability > 0 2. Weight every survivor 1000 × conditions × bait 3. One weighted draw species locked in Global multiplier rain/storm × window × moon, capped at 2.0 Easing curve odds climb as the cycle progresses Roll each cycle bite, or keep waiting Reel in → the locked-in species spawns → one treasure roll
A single cast. The left track runs once and is finished before the first bite signal; the right track loops until you hook something or give up. Only a successful catch on a real rod rolls for treasure — the improvised rod never rolls, and a failed cast costs you nothing but time and rod durability. See Treasure, decomposed for what a hit costs the rod.

The weight formula

Every eligible species gets an integer weight. That weight is what the draw actually uses:

// per species, recomputed every cast speciesMul = min( rainOrStorm × timeOfDay × temperature , MaxStackedMultiplier ) weight = round( 1000 × speciesMul × baitMul ) // the pool: each species contributes its weight once per abundance point poolTotal = Σ CatchProbability(i) × weight(i) P(species) = CatchProbability × weight ÷ poolTotal

Three things about this are worth pausing on, because they explain most surprising results:

The baseline pool

With every multiplier neutral, the odds are just abundance ÷ total abundance. This is the floor everything else moves away from:

40species reachable by rod in fresh water
28species reachable by rod in salt water
433total pond weight (408 fish + 25 junk)
301total sea weight (276 fish + 25 junk)

Sea water has a smaller pool, so every individual sea species is proportionally more likely than a freshwater one of the same abundance — and junk is too, at 8.31% versus 5.77%.

Fresh water, rodAbundanceOddsSalt water, rodAbundanceOdds
Fathead Minnow255.77%Mackerel227.31%
Carp225.08%Walleye Pollock206.64%
Bluegill225.08%Flathead Mullet185.98%
Yellow Perch214.85%Pacific Cod165.32%
Sunfish204.62%Roughneck Rock / White Grunt144.65%
…33 more species…——…22 more species…——
Lake Sturgeon, Severum, both rare muskies30.69%Atlantic Blue Marlin31.00%
———Great White Shark20.66%
Junk (4 wellies + 1 pot)255.77%Junk (same table)258.31%

Water temperature: the strongest natural filter

Temperature is a piecewise-linear tent per species: 1.0 at TempOptimal, falling away linearly in both directions, and flattening to a floor of 0.1 once you pass TempMin or TempMax.

water ≤ TempMin → 0.1 // MinTempMultiplier water < TempOptimal → lerp( 0.1 → 1.0 ) across TempMin..TempOptimal water = TempOptimal → 1.0 water > TempOptimal → lerp( 1.0 → 0.1 ) across TempOptimal..TempMax water ≥ TempMax → 0.1 // MaxTempMultiplier
1.0 0.75 0.5 0.25 0.1 0°C 5 10 15 20 25 30
Slimy Sculpin — optimal 10°C Brook Trout — optimal 13°C Bluegill — optimal 25°C Flathead Catfish — optimal 26°C
Four species' temperature response, exactly as the game computes it. Note how little overlap there is near the peaks: at 10 °C the sculpin is at full strength while the bluegill sits on the floor, and at 25 °C that reverses. Water temperature is GetBaseEnvTemperature() plus your WaterTempOffset, so one config value shifts every one of these curves together.

Time of day, and the cap that actually bites

The day is cut into four windows. Exactly one applies at any moment — they never overlap or stack with each other.

Night 1.15× Dawn 1.10× Day 1.00× Dusk 1.10× Night 1.15× 00:00 05 07 17 20 24:00 moon phase applies only inside the night window
The four windows and their global bite-rate multipliers, with the default hour boundaries. Moon phase is night-only by design, which is why it can never stack with dawn or dusk.

Rain and storm are mutually exclusive — a storm replaces rain rather than adding to it. What does stack is rain/storm × window × moon, and that product is clamped by MaxStackedMultiplier (default 2.0). Here is every interesting combination, with the raw product and what the game actually uses:

ConditionsComponentsRawApplied
Clear day1.001.0001.000×
Rainy day1.25 × 1.001.2501.250×
Stormy day1.50 × 1.001.5001.500×
Clear night, new moon1.15 × 0.901.0351.035×
Clear night, full moon1.15 × 1.201.3801.380×
Stormy dawn1.50 × 1.101.6501.650×
Rainy night, full moon1.25 × 1.15 × 1.201.7251.725×
Stormy night, full moon1.50 × 1.15 × 1.202.0702.000× — clamped

So the cap engages in exactly one situation on default settings: a stormy full-moon night, where it clips 0.07 off the multiplier. That is the best-conditions ceiling — and it is also the single most productive time to fish, at double the clear-day bite rate.

Worked example: one bluegill, start to finish

Conditions: fresh water, rod, midday, light rain, water at 25 °C, worm on the hook. The bluegill's row in fish.json gives abundance 22, rain 1.1, day 1.2, optimal 25 °C over a 15–30 °C range.

Rain bandrainfall 0.4 clears RainThreshold 0.3 but not StormThreshold 0.7 → rain applies× 1.10
Time windowhour 12 falls in Day (07–17) → the species' own day multiplier× 1.20
Temperature25 °C is its optimum — peak of the tent× 1.00
speciesMul1.10 × 1.20 × 1.00 = 1.32, under the 2.0 cap1.32
Baitworm vs. the panfish category — its joint best pairing× 2.00
weightround(1000 × 1.32 × 2.00)2640
Contribution22 abundance points × 264058 080
Odds58 080 ÷ 327 929 pool total17.71%

The bluegill starts as the joint second-most-likely pond catch at 5.08% and ends up first, at 17.71% — a 3.5× improvement, and better than one catch in six. Meanwhile the lake sturgeon, a cold-water fish, has collapsed from 0.69% to 0.14% in the same water:

5.1 4.6 all other pond species 5.8
17.7 16.1 all other pond species 7.6
Bluegill Sunfish Other species Junk

Sunfish move with the bluegill because they share the panfish bait category and near-identical temperature preferences. This is what "targeting a species" means mechanically — you are not raising one fish, you are raising a whole ecological guild and letting everything else fall away.

Why you sometimes catch nothing but boots

Junk is registered in the same pool as fish, with the same 0–25 abundance scale — but junk is not a fish, so none of the multipliers touch it. Its weight is a flat 1000 forever. Fish weights move; junk's does not.

fish weight = 1000 × speciesMul × baitMul // 100 … 5000 junk weight = 1000 // always

The consequence is not obvious and it matters: junk's share of your catches is a direct readout of how hostile the water is. When conditions push every fish toward the 0.1 floor, junk keeps its full weight and inherits the pool.

45% 34% 22% 11% 0% 0°C 5 10 15 20 25 30 5.8% — junk with weather and temperature switched off best water: 22°C, 10.3% junk
Junk's share of freshwater rod catches against water temperature, clear midday, no bait. It bottoms out at 10.3% around 22 °C and climbs to 39% at freezing — nearly four in ten catches. The dashed line is the 5.8% you would get with the weather and temperature systems switched off entirely.

Two practical readings of that curve:

Bait pushes the other way. Because bait raises fish weights and leaves junk untouched, a well-matched bait suppresses junk as a side effect — the worked example above drops junk from 10.31% to 7.62% purely by adding a worm.

Rare things, and how long they really take

Every roll is independent — nothing accumulates, nothing is "due". The chance of seeing something with per-catch probability p at least once in n catches is:

P(at least one in n) = 1 − (1 − p)n
EventPer catch1005001 0005 00010 000
Bluegill (pond, baseline)5.08%99.5%~100%~100%~100%~100%
Great White Shark (sea)0.66%48.6%96.4%99.9%~100%~100%
Lake Sturgeon (pond)0.69%50.1%96.9%99.9%~100%~100%
Hook stuck in a fish (per fillet)0.40%33.0%86.5%98.2%~100%~100%
Treasure0.02%2.0%9.5%18.1%63.2%86.5%
100% 75% 50% 25% 0% 0 2 500 5 000 7 500 10 000 catches median — 3 465 catches (50%) mean — 5 000 (63.2%)
Cumulative chance of a first treasure. The curve is steepest early and flattens badly — going from 63% to 87% costs another 5 000 catches. This is why it reads as a story rather than a farm.

Treasure, decomposed

A treasure hit is a gate plus three nested random choices. First the rod check, then the trigger roll, then the container, how many slots it has, and each slot independently.

0. Right rod? improvised rod → no roll at all // RequireRealRod, before the chance 1. Does it happen? roll ≤ 0.0002 // once per successful catch 2. Which container? weighted pick from TreasureContainers 3. How many slots? random in that container's MinItems..MaxItems 4. What is in it? per slot, weighted pick from TreasureLoot

The gate runs before the trigger roll, so casting with the crafted improvised rod never even burns a chance — the 1-in-5000 only ticks on a proper rod. And the win is paid for in tackle: every successful pull removes maxHealth ÷ RodCatchesToRuin from the rod — a third of its health at the default 3 — so a pristine rod affords exactly three treasures before it's ruined. Step 4 running per slot rather than once is what makes two identical containers hold different things. The shipped containers:

ContainerWeightChanceSlotsMean slots
Dry Bag (black)3.050.0%1–32.0
Wooden Crate2.033.3%2–43.0
Sea Chest1.016.7%3–64.5
Expected items per treasure2.75

The rarest container is deliberately the most generous, so the good outcome is doubly lucky. Loot weights total 29.0, and each slot draws from that independently:

ItemWeightPer slotAppears in a haul
Rag6.020.7%46.1%
Nails (5–30)5.017.2%39.8%
Rope4.013.8%32.9%
Duct Tape3.010.3%25.6%
Fishing Hook3.010.3%25.6%
Canteen / Screwdriver / Matchbox2.0 each6.9%17.7%
Compass1.03.4%9.2%
Binoculars / Black Caviar0.5 each1.7%4.7%

The last column is 1 − (1 − w/29)^slots averaged over the container mix — the chance an item shows up somewhere in a haul rather than in one specific slot. Multiply by the 0.02% hit rate for the true rarity: black caviar from treasure lands at roughly 1 in 107 000 catches.

Reading the numbers off your own server

You do not have to take any of this on faith. DebugLogs: 2 in general.json prints the whole computation to $profile:Gebs/logs/ for every cast:

4. Tools & Gear — what each one is for

The Items & Gear tab lists everything the mod adds. This section is about what each piece actually does for you, and when it's worth the inventory space.

🎣 Fishing rods

Four coloured rods on top of the vanilla one. They're cosmetic in performance but wear on every catch outcome — success or failure alike, so a long unlucky session costs the same durability as a good one. A rod can be repaired back up to Worn, never to pristine.

🔪 Fish knives

Six colours. Any knife fillets a fish, but the gebsfish knives are the ones worth carrying: about 54% more durability than a vanilla hunting knife and 10% faster filleting (server-configurable via FishKnifeSpeedMultiplier). If you fillet in bulk, this is the single biggest quality-of-life item in the mod.

🧰 Fishing Rod Repair Kit

Combine with a damaged rod to restore it. The kit is not consumed — it takes durability itself and can be reused until it wears out, so one kit covers many repairs.

🕸 Bamboo Fishing Net

Craft from a Long Wooden Stick + Netting; repair with more Netting. The net is a passive catch method with its own table, separate from the 79-species list — it pulls minnows, frogs and salamanders rather than the rod pool. Catches drop into its own 4×4 cargo, falling back to your feet if that fills up.

🪤 Traps

Large and small traps are the passive alternative to casting. The small trap is the only way to get most small aquatic life — minnows, crayfish, shrimp, frogs, salamanders, clams and mussels. If you want live bait or a Bait Bucket stocked, this is how.

🧊 Coolers

Twelve colours. A cooler actively chills its cargo toward −5 °C: rot stops, live bait stops dying, and food freezes. It's the only container that preserves everything — but see the caveat below.

🪣 Bait containers

Three containers, three different jobs, and they do not overlap — see the table in the next section. The short version: Worm and Bug Containers keep live bait alive, the Bait Bucket keeps aquatic catches from rotting, and tackle boxes preserve nothing at all.

🧰 Tackle boxes

Small, Medium, Large and Fun variants across many colours. Pure storage — they hold lures, bait, tools, and the Large boxes hold knives too. They preserve nothing, which is exactly what makes the dedicated containers worth carrying alongside them. Large and Medium boxes are also deck-mountable on the jon boat.

🏆 Wooden Fish Mount

The trophy plaque — crafted, wall-mounted, and permanent once a fish is on it. See Trophy Mounts below.

👕 Angler clothing

Fishing hats, shirts and gloves in several colours. Cosmetic — they carry no fishing bonus.

5. Bait & Containers

Live bait — worms, grubs, crickets, grasshoppers — dies about 90 minutes after you find it. Artificial lures never spoil (they still wear and can be lost like any hook). Which container you use is the whole game here, and the containers do not overlap:

ContainerHoldsWhat it preserves
Worm ContainerWorms, grubsPauses the live-bait death clock
Bug ContainerInsectsPauses the live-bait death clock
CoolerAnythingPauses food rot and the live-bait clock
Bait BucketSmall aquatic catches only — minnows, crayfish, shrimp, frogs, salamandersStops them rotting. Not a live-bait keeper
Tackle boxesAnythingNothing. Convenience only

6. Handling Your Catch

Gut a fish with any knife to get fillets. Some species also yield a bonus: caviar from roe-bearing fish, tails and claws from lobsters and crabs. Fillets cook like any vanilla meat.

Frozen fish cannot be filleted. If you have been carrying a catch in a cooler it will freeze — let it thaw before you try to gut it.

Filleting has two side effects worth knowing: it can draw a predator (see below), and roughly 1 in 250 fillets recovers a damaged hook or lure "stuck in the fish."

Predators

Fishing, filleting, a failed cast, and net use can each attract wolves or bears — about 1% per action by default, configurable per action. Spawns are land-only, so no underwater wolves. Everyone nearby may hear a warning sound; the player who caused it also gets a chat warning.

7. Treasure

Very occasionally a catch brings up something other than a fish: a container, full of loot.

Server owners define both halves in general.json. TreasureContainers lists what the treasure can arrive as — each entry with its own weight, health range and item count, so a rarer container can be made to hold more. TreasureLoot lists what can be inside, each with a weight, health range and quantity range for stackables. Set any entry's weight to 0 to retire it without deleting it.

It ships seeded with plain vanilla classnames so it works immediately, but the pools are meant to be replaced — this is the one feature where the whole point is that you decide what's worth finding.

For the full decomposition — the container odds, expected item counts, per-item chances and how long a first find actually takes — see Treasure, decomposed.

8. Trophy Mounts

The Wooden Fish Mount is a plaque you hang on a wall and display a real catch on.

9. The Jon Boat

A drivable flat-bottomed boat in five variants — green aluminum, gray aluminum, and desert, snow and forest camo. It has its own damage zones (chassis, engine, three floaters), a spark plug slot, and cargo space.

Deck mounts: two deck slots each take a cooler or a tackle box and show it sitting on the deck. Both slots accept the same families, so run two coolers, two boxes, or one of each.

10. Server Admin Guide

The four config files

Everything lives in $profile:Gebs/. Each file documents its own fields in built-in ...Info strings, so the file is its own reference:

How config updates work

This decides which of your edits survive a mod update, so it is worth understanding once:

Economy files

On server start the mod writes gebsfish-types.xml and gebsfish-spawnabletypes.xml into $profile:Gebs/mpmissions/. You must merge these into your mission's economy files yourself — the mod cannot do it for you. They contain only Gebsfish classnames; vanilla fish are already in your mission's own types.xml.

Logging and debugging

Timestamped session logs go to $profile:Gebs/logs/. DebugLogs: 1 gives per-cast summaries; DebugLogs: 2 prints full per-fish breakdown tables that answer "why isn't fish X spawning." Logs older than 3 days are deleted automatically at startup so an unattended server does not accumulate one file per restart.

11. Caveats & Gotchas

Everything below is intended behaviour that commonly reads as a bug.

For players

Some things can't be gutted

18 species are catch-only — all the crayfish, minnows, frogs, salamanders, clams, mussels, snails, starfish and jellyfish, plus sardines, shrimp and bitterlings. They are bait, not food.

Frozen fish won't fillet

Cooler-chilled fish freeze. Let it thaw first.

Tackle boxes preserve nothing

They carry bait but never keep it alive. That is what makes the dedicated containers worth the space.

The Bait Bucket isn't for bait

Despite the name, it holds small aquatic catches and refuses worms and insects outright.

Mounting a fish is permanent

No detaching, ever. Destroying the mount is the only way to get the fish back.

The plaque still expires

The mounted fish never rots, but the mount itself has a 45-day untouched lifetime like a tent.

Fishing can get you killed

Casting, filleting, failed casts and nets can all draw wolves or bears.

Deck slots are picky

Jon boat deck mounts take coolers and tackle boxes only — not jerry cans.

For server admins

Frequently Asked Questions

What do I need to run Gebsfish?
Gebsfish plus Community Framework (CF), loaded on both server and client. That's it — everything else is optional tuning.
Where are the config files?
In your server profile folder: $profile:Gebs/general.json (global settings, weather, predators), fish.json (all 79 species), bait.json (the bait preference matrix), and junk.json (junk catches). Delete any of them and the server regenerates fresh defaults on next start. Every file documents its own fields in built-in ...Info strings.
I'm upgrading from an older version — where did fishingsettings.json go?
The old single-file config was replaced by the four files above. It's a clean break: there is no automatic migration, so the server generates fresh defaults and you re-apply your custom tuning by hand. Keep a backup of your old file for reference.
Why isn't fish X spawning?
Three usual suspects: its Environment doesn't match where you're fishing (1 = pond, 2 = sea, 3 = both), its CatchMethod doesn't include your method (1 = rod, 2 = large trap, 4 = small trap, added together), or its CatchProbability is 0. Set DebugLogs: 2 in general.json and the server log will print the full pool for every cast — including exactly why each fish was or wasn't eligible.
What are the actual odds of catching a specific fish?
In fresh water with a rod, the pool is 40 species with a combined weight of 408, plus 25 for junk — so an average-abundance fish sits somewhere between 0.7% and 5.8% per catch at baseline. Salt water has a smaller pool (28 species, weight 276), which makes every individual sea species proportionally more likely.

Those baseline numbers then move a lot: weather, time of day, water temperature and bait all multiply a species' weight, and a well-matched bait on a good day can take one fish from 5% to nearly 18%. The Odds, In Detail in the Full Guide has every formula, the real percentages and a full worked example with charts.
Why am I only catching boots?
Because junk is the one thing in the pool that no multiplier touches. Fish weights scale up and down with conditions; junk's weight is fixed forever. So when the water is far outside what the local fish tolerate, every fish drops toward a tenth of its normal weight while junk keeps all of its — and junk's share climbs from its 5.8% baseline to as much as 39% in near-freezing water.

A run of boots is therefore information, not bad luck: the water is wrong for the fish that live there. Move to different water, fish a different hour, or wait for the season to turn. Adding well-matched bait also helps directly, because raising fish weights pushes junk's share back down. See Why you sometimes catch nothing but boots for the curve.
Can I turn off the weather / moon / temperature / bait systems?
Yes, each independently. WeatherCatchBoostEnable, MoonPhaseEnable, TemperatureEffectEnable, and BiteSpeedEnable live in general.json under WeatherSettings; the bait system's master toggle is Enable at the top of bait.json. Your tuned values stay in the file while a system is off.
I edited BiteSpeed and my server crashed on startup. What happened?
BiteSpeed must be a single space-separated string of 24 hourly values ("0.85 0.9 1 ..."), not a JSON array — DayZ's JSON loader crashes on nested float arrays. Also keep any single string value in the configs under ~900 characters; the engine's reader hard-crashes past ~1024.
Do the fish work with trader mods?
Yes. Fish quality defaults to 1.0 (full) specifically because popular traders (DayZ-Expansion-Market, TraderPlus, Dr. Jones) only accept full-quality items. If your trader scales price by quality, you can lower FishQuality in general.json.
How do I add the fish to my server's economy?
The mod generates gebsfish-types.xml and gebsfish-spawnabletypes.xml into $profile:Gebs/mpmissions/ on server start — merge those into your mission's economy files. The generated types contain only Gebsfish classnames; vanilla fish are already in your mission's own types.xml.
What is the treasure catch, and how rare is it really?
A very rare chance on a successful catch to pull up a container full of loot instead of a fish. Default is 0.0002 — about 1 in 5000 catches. Note that is catches, not casts, so failed casts cost you nothing: a session that lands 60 fish has roughly a 1.2% chance of seeing one, and a few hundred fish still very probably turns up nothing. That is deliberate — it is meant to be a story someone tells, not something you can farm.

Two catches: it only bites on a real fishing rod — the crafted improvised rod never rolls — and winching a loaded container up costs the rod a third of its maximum health, so three treasures ruin a pristine rod. Admins can relax both (RequireRealRod, RodCatchesToRuin).

The container appears at your feet (they are usually too big to pocket) and its contents are rolled fresh every time, so two identical chests will not hold the same things.
How do I change what treasure contains, or turn it off?
Two pools in general.json, both entirely yours to define:

TreasureContainers — what the treasure arrives as. Each entry has a Weight, a health range, and its own MinItems/MaxItems, so a rarer container can be made to hold more.
TreasureLoot — what can be inside. Each entry has a Weight, a health range, and a MinQuantity/MaxQuantity for stackables like ammo or nails.

Every item slot rolls the loot pool independently. Any classname on your server works, including ones from other mods. Set an entry's Weight to 0 to retire it rather than deleting it — deleted rows come back on the next version bump.

It ships seeded with plain vanilla items so it works immediately; those are placeholders and meant to be replaced. To switch it off entirely set TreasureSettings.Enable to 0 (or Chance to 0). To retune, 0.0005 is about 1 in 2000 and 0.00005 about 1 in 20000.
How do I keep my bait alive?
Live bait (worms, crickets, grasshoppers, grubs) dies about 90 minutes after you find it. Store it in a Worm Container, Bug Container or a cooler to pause that clock. The rubber worm is artificial and never dies.

The Bait Bucket is a different job: it holds small aquatic catches — minnows, crayfish, shrimp, frogs and salamanders — and stops them rotting. It will not accept worms or insects, and it is not where you keep live bait alive. Tackle boxes can carry bait but preserve nothing, which is what makes the dedicated containers worth the space.
Why did my rod break? Can I repair it?
Rods and hooks wear a little on every catch outcome — success or fail. Repair rods with the Fishing Rod Repair Kit and the bamboo net with Netting, but repairs cap at Worn and Ruined tools cannot be repaired, so retire gear before it's too late.
Can I turn predators off (or up)?
Fully configurable in general.json: a per-action chance for fishing, filleting, failed casts, and net use (default ~1% each), the predator list with weights and counts, spawn radius, the warning sound, and the chat warning. Set the chances to 0 to disable, or crank them for a high-stakes server.
Does Gebsfish work on custom maps?
Yes — Chernarus, Livonia, Sakhal, Banov, Namalsk, Deer Isle, Lux, NavalPlus, Sahrani, Artseinen, MelkartV2, and Deadfall are supported out of the box. If your map's fishing doesn't work, open a ticket in the Discord and we'll issue a hotfix for that map.
Can I put Gebsfish in my server pack / mod pack?
No. Repacking is not permitted under any circumstances — use a Steam Collection to include the mod on your server. See the Usage & Terms.
Can I monetize my server while running Gebsfish?
Yes, provided you follow the DayZ Server Monetization agreement and have permission from Bohemia.

Changelog

v4.0.0 — Unreleased

Requirements & Compatibility

  • DayZ 1.29 compatibility
  • Community Framework (CF) is now a required dependency — the RPC system migrated to CF's RPCManager
  • DZ_Weapons_Melee added as a required addon; all fish now have melee functionality (matching vanilla)
  • New map yield support: Sahrani, Artseinen, MelkartV2, and Deadfall (credits: DapperDan)

New Systems

  • Weather catch buffs — global rain / storm / time-of-day multipliers in WeatherSettings, plus per-fish Rain/Storm/Dawn/Day/Dusk/Night multipliers on every species (trout favour rain, walleye / pike / catfish favour night, sturgeon favours storms). A stacked-multiplier cap prevents storm + night from compounding past 2.0x. Fishing rod description hints at the mechanic
  • Moon phase — accurate synodic phase (Meeus Julian Date algorithm) computed from the in-game date drives a night-only catch buff: full-moon nights up to +20%, new-moon nights down to -10%. Independently toggleable
  • Water temperature — per-fish TempOptimal / TempMin / TempMax (degrees C) form a bell curve seeded from ecological buckets (cold deepwater, cold, cool, warm, tropical). Ambient air temperature serves as the water proxy, and a global WaterTempOffset shifts the whole curve for winter maps (e.g. Sakhal -5) or tropical servers (+5) without editing every fish
  • Bite-speed cycle scaling — every fish carries a 24-hour BiteSpeed curve tuned to its real-world circadian pattern; the catching system aggregates the active pool (weighted by abundance and time of day) to drive how long you wait between bites
  • Bait / lure preference matrix — every bait and lure carries per-fish multipliers that bias which fish takes the hook: worms and insects favour panfish and trout, soft-plastic worms favour bass, live minnow and salamander favour pike / musky / walleye, spinnerbaits favour bass / pike / musky, spoons favour trout and salmon, jigs favour bass / walleye. Numbered lure variants share one family entry (geb_SpinnerBait covers geb_SpinnerBait1-4; an exact numbered entry still overrides). Roughly 700 seeded pairings, all overridable in JSON, master Enable toggle at the top of bait.json. Final pick weight = CatchProbability x weather x time-of-day x bait
  • Hook-from-fish recovery — filleting a fish has a small configurable chance (default ~1/250) to recover a damaged hook or lure "stuck in the fish"; the hook pool, weights, and health range are admin-tunable
  • Ultra-rare treasure catches — an extremely rare chance on a successful catch to pull up a container full of loot. Two independent admin-defined pools: TreasureContainers decides what the treasure arrives as (weight, health range, and its own item count), TreasureLoot decides what goes inside (weight, health range, quantity range for stackables). Every item slot rolls the loot pool separately, so no two hauls match even from the same container. Default chance is 0.0002 — roughly 1 in 5000 catches, not casts, so a session landing 60 fish has about a 1.2% chance of seeing one. Treasure only bites on a proper fishing rod — the crafted improvised rod never rolls (RequireRealRod, on by default) — and winching a haul up is brutal on tackle: each pull costs the rod a third of its maximum health, ruining a pristine rod in three treasures (RodCatchesToRuin, 0 disables the wear). Seeded with plain vanilla classnames so it works out of the box, and meant to be replaced. Toggle with TreasureSettings.Enable, or set Chance to 0
  • Cooler freezer system — coolers keep contents cold, live bait is perishable, and a frozen-fillet guard prevents prep on frozen fillets
  • Bait freshness rules — each container has one job, and they do not overlap:
    • Worm Container / Bug Container — hold worms, grubs and insects, and pause the ~90 minute live-bait death timer
    • Cooler — pauses both food rot and the live-bait timer for anything inside
    • Bait Bucket — holds small aquatic catches only (minnows, crayfish, shrimp, frogs, salamanders) and stops them rotting. It does not accept worms or insects and is not a live-bait keeper
    • Tackle boxes — can carry bait for convenience but preserve nothing
    • Artificial lures (rubber worm and all hard baits) never spoil - they have no freshness timer. They still take hook wear on every catch and can be lost like any hook
  • Predator spawn rework — three independent gates (per-action chance, weighted predator pick, per-predator min/max count) with separate chance values for fishing, filleting, failed casts, and net use. Land-only spawn search (no underwater wolves), optional warning sound RPC, configurable chat warning
  • Per-action config sections — BambooFishingNetSettings, DigBugsSettings, DigWormsSettings, each owning its FindChance (per-attempt probability of finding anything) and a weighted Catches[] table. Tool wear still applies on a miss
  • Configurable net catches — net spawn table entries carry an Environment field (1 pond, 2 sea, 3 both) for per-environment filtering; catches spawn into the net's cargo (4x4) first, falling back to the player's feet when full. New bamboo net repair recipe: one Netting + a damaged net restores it to Worn

Config Overhaul

  • fishingsettings.json replaced by four self-documenting files in $profile:Gebs/: general.json, bait.json, junk.json, fish.json. Clean break — no migration: servers regenerate fresh defaults and re-apply their custom tuning by hand
  • Fish are fully data-driven: one Species row per fish (classname, recipe shape, fillet/caviar/lobster results, meat counts, environment, catch method, catch probability, weather multipliers, temperature preference, BiteSpeed curve) feeds a single generic yield + fillet-recipe pipeline
  • Master enable toggles for every catch-modifying system — disabled systems keep their tuned JSON values with no in-game effect
  • Bait multipliers are written rounded to the nearest 0.01, so the file shows clean values instead of float noise
  • Missing config sections re-seed with fully populated defaults; all four files carry a ConfigVersion stamp for future migrations
  • Detailed admin-facing documentation strings on every field, kept under the engine's JSON string-length crash ceiling
  • How the config updates itself — worth reading once before you tune anything, because it decides which of your edits survive a mod update:
    • Each of the four files carries its own ConfigVersion. On startup a file is only rewritten if something actually changed: a fresh generation, a section that had to be re-seeded, or a version bump. An up-to-date file is left completely alone — no rewrite, no modified timestamp
    • A version bump rewrites all four files, not just the one that changed. The stamp is per-file and every file compares it, so bumping the mod version touches general, bait, junk and fish even when only one of them gained anything. Your values are carried through untouched — the file is re-serialized from what was loaded, not regenerated from defaults
    • Your existing values are never overwritten. The update is strictly additive: default entries missing from a list get inserted, entries already there are left exactly as you set them
    • Deleting an entry is not how you disable it. A row you remove is treated as missing and gets re-added on the next version bump. To retire something permanently set its weight / chance / CatchProbability to 0 — that survives every update. A whole section emptied on purpose is respected; a section that is entirely absent gets re-seeded
    • New on/off toggles are re-applied during migration. The engine's JSON loader zeroes any field your file doesn't mention rather than using the built-in default, so a toggle introduced in a later version would otherwise arrive switched off on every existing server. Migrating from a version older than the one that added it restores the intended default; once your file is stamped at or past that version, a toggle you turned off stays off through every future update
    • Pre-3.3 layout files (fishingsettings.json, Fish/Logs/, extras/mpmissions/) are swept into $profile:Gebs/gebs_oldfiles/ on first start so old and new never sit mixed together, and the emptied folders are removed afterwards. Nothing from the old monolithic config is migrated into the new files — it is archived so you can still read your old tuning

New Fish & Creatures

  • Hammerhead Shark
  • Lake Sturgeon (with roe -> new Black Caviar item)
  • Alligator Gar
  • Muskellunge, Barred Muskellunge, Tiger Muskellunge, Spotted Muskellunge
  • Northern Snakehead
  • Neosho Bass, Striped Bass
  • White Grunt, Southern Flounder, Yellow Snapper
  • American Bullfrog, Red Salamander
  • New Crayfish variants: Cave, Florida, Monongahela, Red Swamp, Rusty
  • Northern Pike gains roe -> new Yellow Caviar item

New & Reworked Models

  • Northern Pike, Bluegill, Red Breast Sunfish, Yellow Perch, Fathead Minnow, Sauger, Walleye
  • Brown / Brook / Rainbow / Cut Throat Trout, Lake Trout, Chinook Salmon
  • Black Bass, Bonito, Bowfin, Large Mouth Bass, Small Mouth Bass, White Bass
  • Blue Marlin, Sailfish, Humphead Wrasse, Yellowfin Tuna
  • Asian Sea Bass, Siamese Tigerfish, Angelfish, Pacific Cod, Perch, Severum, Rougheye Rock, Red Head Cichlid, Blue Tang
  • Snow Crab + Snow Crab Legs, Blue Jellyfish, Black Devil Snail, Mussel, Starfish, Blood Clam

New Vehicle

  • Jon boat — new drivable flat-bottomed boat with five variants (green aluminum, gray aluminum, desert / snow / forest camo), custom damage zones (chassis, engine, three floaters), SparkPlug slot, and cargo space. More boat content coming in a future update
  • Jon boat deck mounts — two deck slots that take any cooler or tackle box and show it sitting on the deck. Both accept the same families so you can run two coolers, two boxes, or one of each. The vanilla jerry can is deliberately not included: a proxy gives one position and rotation to everything attached to it, and the can's model axes don't match the gebsfish containers, so no single orientation suits both

New Items & Crafting

  • Grub Worm (chance to find when digging for worms)
  • Coolers in 12 colors (with the freezer system)
  • Wooden Fish Mount — a trophy plaque you hang on a wall and mount your catch on:
    • Crafted from 1 Wooden Plank + 1 Metal Wire, with a Hacksaw on you. Combine the plank and wire; the saw isn't consumed but takes durability, and the craft is refused without one. (DayZ caps recipes at two ingredients, so the saw is enforced as a tool rather than a third slot.) Disable it with RecipeToggles.CraftFishMount in general.json
    • Placed on walls — hold to place and it snaps flat against any near-vertical surface, hanging face-out like a picture. Aim somewhere without a wall and it falls back to normal ground placement
    • The trophy is the actual fish you caught, not a generic model — its weight and quality persist through the attachment, so a personal-best catch stays a personal-best on the wall
    • Mounting is permanent. Once a fish is on the plaque it can't be detached, dragged out, or taken to hands. Ruined and rotten fish are refused up front. Destroying the mount does not give the fish back — the trophy is destroyed along with the plaque. Mounting a catch is a one-way decision, which is what stops the plaque doubling as a free never-rots fish locker
    • Mounted fish never rot. Decay is paused entirely while the fish is on the plaque, so a trophy is taxidermy rather than a countdown
    • The plaque itself lasts 45 days untouched — the same lifetime as tents and barrels rather than the 2-hour gear lifetime, so wall trophies persist like a base fixture and abandoned ones clean themselves up on the same schedule
    • Placeholder model until the final plaque p3d lands
  • Craft metal hook from metal wire + pliers
  • Bamboo net repair recipe (Netting + damaged net -> Worn)
  • New Bamboo Fishing Net model and full texture set

New Tackle & Lures

  • 4 Spoon Lures
  • 4 Curly Tail Jigs
  • Spinner Baits 1-4 (new models)
  • Squarebill Lure (replaces Lure4)
  • Yellow Crank, Purple Crank, Popper lures (replace old lures)
  • New Small Tackle and Large Tackle models
  • New Worm Container and Bait Bucket models

Balance

  • Realistic catch probabilities — all 79 fish CatchProbability defaults reflect real-world abundance and bite habit: bait / abundant 20-25, common gamefish 12-18, uncommon 7-11, trophy / rare 2-5
  • Realistic fish weights — 63 fish weight values rebalanced against real-world adult catch sizes: panfish / reef fish dropped (BlueGill 1700 -> 400 g), trophy pelagics raised (GreatWhiteShark 3700 -> 20000 g, Blue Marlin -> 15000 g), pike / muskellunge and trout / salmon families tiered by species. Landing the largest pelagics now carries real encumbrance — by design
  • Ecology pass — White Bass and Bowfin moved to behaviorally correct bait-preference buckets; 12 fish Environment values corrected (anadromous salmonids, Striped Bass, Barramundi, mullet, and gar now appear in both fresh and salt water; three freshwater species un-misclassified from saltwater)
  • Default predator spawn chance reduced from 25% to 1% per action
  • Geb fish knives: +54% durability over vanilla HuntingKnife and 10% faster filleting (configurable via FishKnifeSpeedMultiplier)
  • 30% keep-chance for caviar when filleting roe fish (configurable via CaviarChance)
  • Small crustaceans and minnows can now be caught in large traps
  • Fishing rods repair to Worn at best; Ruined tools can no longer be repaired
  • Adjusted bait bucket size

Localization

  • New stringtable entries: Hammerhead Shark, Lake Sturgeon, Cooler, Wooden Fish Mount, Craft Metal Hook, Rougheye Rock
  • Jon boats now display "Jon Boat" with a proper description in all 14 languages (previously vanilla "Rubber Boat" and a missing description key)
  • Minnow Container renamed to Bait Bucket, name retranslated in all 14 languages
  • Orphaned rows pruned (fillet keys for species without fillet items, superseded king crab tail, generic clothing descriptions replaced by per-color keys, unused tackle box name)

Code & Internals

  • Replaced all GetGame() calls with g_Game for consistency
  • Removed invalid ref keywords from RPC handler parameters (CF compatibility)
  • Data-driven pipeline: one generic catch yield and one generic fillet recipe seeded per Species row replace 79 per-fish yield classes and per-fish recipe classes (vanilla fish keep their modded Prepare* overrides)
  • BiteSpeed data consolidated from 79 inline 24-hour arrays into 8 named circadian curves
  • Weighted-pick logic consolidated into a shared GebWeightedPick helper; the catch pick memoizes per-species weather/bait multipliers instead of recomputing per pool entry
  • Yield bank init no longer registers vanilla's 15 default yields just to clear them (vanilla's clear leaves stale sync indices); re-entry guard prevents double registration on worlds that fire the init twice
  • XML generators: types.xml emits each classname exactly once and only geb_-prefixed entries (no more collisions with the mission's own types.xml); spawnabletypes chance values formatted correctly; generation batched, version detection hardened, files no longer regenerate every restart, server-only guard
  • Logger: filename sanitization, Reset(), initialization fix; DebugLogs values above 2 clamp to elevated instead of silently disabling verbose logs
  • Logger no longer holds the session file handle open. Enforce exposes no flush, so CloseFile is the only thing that commits bytes to disk — opening and closing around each write means a hard crash can't take the tail of the log with it, and the file stays unlocked so it can be read or moved while the server is running
  • Log retention: session logs older than 3 days are deleted at startup, so an unattended server stops accumulating one file per restart. Age is read from the filename (the generator owns the YYYYMMDD-HHMMSS_tag.log format) because Enforce's file API exposes no modification time; anything that doesn't parse as that format is left untouched, and the live session file is never a candidate
  • Old-layout migration now removes the folders it empties. After sweeping fishingsettings.json, Fish/Logs/ and extras/mpmissions/ into gebs_oldfiles, the emptied Fish/ and extras/ trees are deleted deepest-first. Enforce has no remove-directory call, so this depends on the engine accepting an empty directory — each folder is confirmed empty before the attempt, and any that survive are logged by path for manual cleanup instead of a blanket "delete these yourself" message
  • Craft and repair recipes (bamboo net, fishing pole, hook from wire) now register before the data-driven fish loop. RegisterRecipe hands out sequential IDs and actions send that ID over the network, so anything registered after a variable-length loop shifted by however many species that side happened to register
  • In-hands IK registrations collapsed to three name-array loops
  • Consolidated repeated classes into shared base files; sorted large files by category; standardized brace style
  • Replaced Param3 usage with XmlTypeEntry class for clarity
  • Added base classes and inheritance cleanup for containers; all four bait containers now share the same self-nesting guard, and redundant IsContainer() overrides (vanilla Container_Base already returns true) were removed
  • Vanilla-fish fillet recipes (Carp / SteelheadTrout / Mackerel / WalleyePollock) collapsed from four near-identical ~40-line Init bodies into one shared SetupVanillaFilletRecipe helper on PrepareFish — they now get the same MeatMin/MeatMax inversion guard, MAXIMUM_RESULTS clamp, and caviar-chance logic as every other fish; no-op CanDo/Do overrides deleted
  • Renamed Sturgeon -> LakeSturgeon; OldTackle model files -> MediumTackle (class names finalized next wipe); Bug Container moved from data/tools/ to data/tackle/
  • Predator chat-warning code and docs renamed to match reality: the message goes to the triggering player only (the warning sound is what nearby players hear)
  • Removed a redundant modded YieldItemBase constructor that made every yield item run Init() twice per construction
  • All p3ds now use a Camo hidden selection to support retexturing
  • Asset naming pass: tool and clothing textures renamed to engine conventions (_co / _normals / _smdi); fish knife and big-game fishing line materials updated
  • Added skinning action to Neosho Bass and Striped Bass

Fixed

  • Fish catches and modded-fish filleting were both broken. Vanilla's YieldItemBase and RecipeBase constructors call Init() themselves, so Init() ran before the per-species row could be handed over and bailed on its null guard — and registration never runs it again. Every fish yield registered with an empty type and zero environment/method masks, and since the yield bank keys on the type hash, all 79 species collapsed onto one empty entry matching nothing: junk was the only possible catch. The data-driven fillet recipes likewise registered with no ingredients and no results, so no modded fish offered a Gut action (the four vanilla fish kept working through their own Prepare* overrides). Setup now applies from the setter instead of relying on constructor-time Init()
  • Clients registered zero fillet recipes: the config left the Species table null on clients until the ConfigSync RPC, which lands after PluginRecipesManager has already registered. Clients now seed the compiled defaults in memory, and the RPC still overwrites them with the server's file
  • Jon boat deck attachments were invisible — the model carried the proxies and the config declared the slots, but nothing tied the two together. Added the ProxyAttachment entries that bind each proxy to its slot. They must live in CfgNonAIVehicles; in cfgVehicles the base class resolves to a new empty one and the malformed entries break the boat's crew config, locking players out of both seats
  • Wooden Fish Mount placement hologram rendered as the normal textured plaque instead of the white ghost: placing was listed in hiddenSelections[] but never declared as a section in Model.cfg, so the hologram material had no swappable selection to land on. The deployable/undeployable materials also needed vanilla's Super shader and full stage chain — flat Normal/Basic with no stages loses the fresnel sheen that makes a hologram read as one
  • Wooden Fish Mount couldn't be placed on walls despite the wall-snapping logic working: EvaluateCollision rejected it through IsFloating, IsBaseViable, IsClippingRoof and HeightPlacementCheck, all of which assume ground placement, and yawPitchRollLimit capped pitch at 89 degrees — one short of flat against a vertical wall. Player collision, permitted-area, underwater and in-terrain checks still apply
  • Jon boat no longer plays the vanilla rubber boat's engine shutdown sound when the engine cuts, including when stepping out of the driver seat. BoatScript hardcodes Boat_01 soundsets for every boat, so the jon boat now has its own script class that suppresses it
  • XML generator crash at startup: FPrint without newlines produced a single-line 85 KB file that overflowed the engine's line-read buffer as fish were added — generators now emit proper line breaks
  • Bait preferences and the temperature curve now apply independently of WeatherCatchBoostEnable — previously the weighted catch pick only ran when the weather toggle was on, silently disabling both systems despite their own toggles
  • BiteSpeed aggregate no longer applies CatchProbability twice (the probability pool already repeats each fish by its weight) — abundant fish were quadratically dominating the bite-cycle timing over rare ones
  • Rods no longer take double durability damage per catch outcome — a leftover duplicate AddHealth call made rods wear at 2x the intended 1.5 HP
  • Hardened edge-case null handling: junk-yield registration now logs and skips (instead of crashing at mission init) when the config failed to load; cooler tick, hook-crafting check, rod-repair plugin lookups, and the debug yield dump all guard references that could be null in broken states
  • Dug bugs now spawn as networked objects (were server-local and invisible to players); dig-bugs also wears the tool and trains soft skills on every completed dig, matching dig-worms
  • Generated spawnabletypes chance attributes were the literal text .2f instead of numbers
  • Predator warning chat message sends once through the first enabled color instead of once per enabled color
  • Recipe result count clamped to the engine cap so an oversized MeatMax in a hand-edited fish.json can't corrupt memory
  • Multiplayer check in TryDamageItems
  • Config sync and predator sound RPCs
  • Net not taking damage when used
  • Grub worm digging; vanilla worm fallback when the grub entry is removed from config
  • Sauger normal map re-enabled; Sturgeon rvmat typo; Blue Marlin normals; Tacklebox normals; Hammerhead Shark materials mapping
  • Fillet textures (Chinook Salmon, Sailfish, Humphead Wrasse, others); fillets showing as wrong fish or blank; old extra Bluegill fillet texture; Fathead Minnow rotten fillet bug
  • Crayfish position in inventory; crayfish becoming invisible after cooking; fixed crayfish rotten texture
  • Lobster Tail on ground / in inventory / in hand; lobster can be cut on the ground
  • Bonito hand position; two-hand fish positioning (mostly — slight inventory orientation issue remains)
  • Scope on base classes so they no longer spawn in
  • p3d selections renamed to Camo where missing; FlatHeadMullet classname typo; Grasshopper texture naming convention
  • Missing semicolons causing config parse errors
  • Boat sound issue; Mahi Mahi LOD texture disappearing at distance
  • Duplicate bamboo net recipe removed; crafting hook from wires
  • Repeated tackles removed from spawnable types; missing clothes added to typesxml

Removed

  • fishingsettings.json and its one-time migration (replaced by the four-file config, clean break)
  • Bundled trader/economy support files (Expansion market configs, TraderPlus configs, Dr. Jones price list, classnames list, pricing calculator)
  • Old expansion files
  • Old README
  • Fishing Calc (outdated)
  • Old newtackle textures
  • Old lure models (replaced by crank/popper variants)
  • Unreferenced normal-map textures (6.4 MB)
  • Dead code purge: fully commented-out jon boat script file, Alteria world-data placeholder block, commented-out RPC registrations, unused locals, and no-op recipe overrides

Known Issues

  • Two-hand fish inventory orientation is slightly angled
  • King Crab and Snow Crab have no in-hands carry pose yet
  • Unreleased-build regressions under investigation (tracked in MAYBE_ISSUES.md): the data-driven yield and recipe registration runs before each entry's config row is attached
v3.3.0

Added or Changed

  • New Creatures
    • American Lobster
    • European Lobster
    • Snow Crab
    • Signal Crayfish
    • European Crayfish
  • Updated stringtables to add new items and remove items
  • Updated yield script to include super
  • Added small crustaceans to be allowed in the minnow bucket
  • New LODs, RVMATs, and normals to every fish
  • Added versioning to the xml generation
  • Added repair kit for fishing rods
  • New models for:
    • Old Tackle Box
    • Great White Shark
    • Large Mouth Bass
    • Small Mouth Bass
  • Added bone min/mzx for crustaceans
  • Added new worm and grub textures
  • New licence for the mod
  • Crayfish, Mussels, and Bloodclams are now food that can be eaten raw or cooked
  • Changed sizing on crayfish to fit the model better
  • Config update to change min/max to intergers instead of floats
  • Recipe name change from CraftWoodNet to CraftBambooNet
  • Updated the Types&classnames folder to .types within the mod folder

Removed

Known Issues

  • Grub Worm and Rubber Worm show as regualr worm when on hook
v3.2.1

Hotfix 1

  • RPC bug fix (thanks DannyDoomNo1 for direction)
  • Fixed mispelling of AtlanticSailfish meat
v3.2.0

Added or Changed

  • Updated config to reflect classname changes in last update that we overlooked
  • Revamped the junk config to add probability to it to change each junk items rarity
  • Added predator messages to stingtable for proper localization
  • Fixed client-server config sync
  • New debugging messages to help troubleshoot issues on servers
  • Revamped several textures for fish and items
  • Reworked the predator spawn system to prevent predators being spawned under water
  • Fixed an issue with minnows being able to be used as infinite bait. Minnows are now removed like other bait
  • Types and Spawnable types now generate in $profiles/Geb/Extras/
  • Added map support for:
    • Banov
    • Namalsk
    • Lux
    • Deer Isle
    • Sahinkaya
v3.1.0

Added or Changed

  • New models for Blue Tang, Blood Clam, and Mussel
  • Classname updates
    • Catfish -> FlatheadCatfish
    • Trout -> RainbowTrout
    • Perch -> YellowPerch
    • Minnow -> FatheadMinnow
  • Stringtable fixes for Simplified Chinese
  • Fixed implementation for Livonia and Sakhal maps
  • Moved config location from $profiles/gebsfish to $profiles/Geb to standardize files as we rework older mods
  • Config updates
  • General code cleanup and refactoring to make it more extensible and easier to maintain in the future.
v3.0.0

Complete New Fishing System

  • Reworked all the gear to work with the new system.
  • Added minnows as bait
  • Fixed knife model positions in the hand
  • New predator system to make fishing less safe
  • New fish config to control catch rate and meat when processed
  • New junk config to configure your own junk items easily
  • Logging system for troubleshooting
  • Overall code imporvements