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
Hover any item for its in-game description.
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.
Hover any bait or lure for its in-game description.
What should I put on the hook?
| Bait / Lure | How you get it | Best for | Weak against |
|---|---|---|---|
| Worm | Dig worms (85% find) | Panfish ×2.0, Carp ×2.0, Trout ×1.6 | Large saltwater ×0.3 |
| Grub Worm | Digging worms or bugs | Panfish ×2.0, Trout & Salmon ×1.8 | Large saltwater ×0.3 |
| Grasshopper / Cricket | Dig bugs (65% find) | Trout & Salmon ×2.0, Frogs/Salamanders ×1.8 | Pike ×0.4 |
| Rubber Worm | Loot (never spoils) | Bass ×2.5 | Panfish ×0.6, Carp ×0.4 |
| Live Minnow | Net or Bait Bucket | Pike/Musky ×2.5, Walleye ×2.5, Bass ×2.0 | Carp ×0.4 |
| Red Salamander | Net catch | Catfish & bottom feeders ×2.5, Bass/Pike ×2.0 | Panfish ×0.4 |
| Live Shrimp | Net or Bait Bucket | Reef & tropical fish ×2.5, small & medium saltwater ×1.5–1.8 | Amphibians ×0.4, Pike ×0.5 |
| Spinner Baits (4) | Loot | Bass ×2.5, Pike/Musky ×2.3, Walleye ×2.0 | Carp ×0.3 |
| Spoon Lures (4) | Loot | Trout & Salmon ×2.5, Saltwater ×1.8–2.0 | Carp ×0.3 |
| Crank / Popper Lures (4) | Loot | All-rounder — Bass ×2.0, Pike ×1.8 | Carp ×0.3 |
| Curly Tail Jigs (4) | Loot | Bass ×2.2, Walleye ×2.0, Panfish ×1.5 | Amphibians ×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
| Make | Combine | Also need | Notes |
|---|---|---|---|
| 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
| Repair | Combine | Notes |
|---|---|---|
| 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:
- Standard fish — 1 to 4 fillets, depending on the species
- Roe-bearing fish (trout, salmon, sturgeon, pike, muskellunge) — fillets plus a caviar, subject to the configurable caviar chance
- Lobsters — a tail plus claws
- Crabs — legs
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:
- Dig for worms — use a digging tool on suitable ground. Can also turn up a Grub Worm
- Dig for bugs — same idea, yields insects. Requires a Bug Container to keep them alive
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 key | Controls |
|---|---|
CraftFishMount | Wooden Fish Mount |
CraftHookFromWire | Metal Hook from wire |
CraftBambooFishingNet | Bamboo Fishing Net |
RepairFishingPole | Fishing rod repair |
RepairBambooFishingNet | Bamboo 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
- Rod — the main method. Works in ponds, lakes and sea. Every species with rod in its catch methods is available to you.
- Large trap — passive. Set it and come back. Catches bigger species that rods also see.
- Small trap — passive, and the only way to get most of the small aquatic life: minnows, crayfish, shrimp, frogs, salamanders, clams and mussels.
- Bamboo net — its own catch table, separate from the species list, configured under
BambooFishingNetSettings.
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:
- Environment —
1pond/freshwater,2sea/saltwater,3both. A sea fish will never appear in a pond. - Catch method — a bitmask you add together:
1rod +2large trap +4small trap. So3= rod and large trap,7= everything. - Catch probability — a 0–25 abundance weight.
0means uncatchable, which is how you retire a species without deleting it.
Once a fish is in the pool, these multiply its odds:
- Weather — per-species rain and storm multipliers.
- Time of day — separate dawn / day / dusk / night multipliers.
- Moon phase — real synodic math from the in-game date. Full moon nights up to +20%, new moon down to −10%. Night only.
- Water temperature — each species has an optimal temperature and a survivable range. Outside that range it drops to a tenth of its normal odds — heavily suppressed, but never quite zero.
- Bait — roughly 700 seeded bait/lure-to-fish pairings bias which fish takes the hook.
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:
| Question | Answered by | Uses | Rolled |
|---|---|---|---|
| How long until something bites? | ModifySignalProbability | The global multipliers in WeatherSettings — one set of numbers for the whole server | Every signal cycle, continuously |
| What is on the end of the line? | GenerateResult | The per-species multipliers in fish.json, plus bait | Once, the moment you cast |
The weight formula
Every eligible species gets an integer weight. That weight is what the draw actually uses:
Three things about this are worth pausing on, because they explain most surprising results:
- The
1000is just fixed-point arithmetic. The draw uses the synchronised integer RNG so client and server stay in lockstep, so float multipliers are scaled to integers. It has no effect on the odds. CatchProbabilityand the multipliers do different jobs. Probability is a whole-number abundance count (0–25); the multipliers are a continuous scale on top. A probability-3 fish with a 2.0× multiplier still loses to a probability-22 fish sitting at 1.0×.- Bait is applied after the cap.
MaxStackedMultiplierclamps the weather × time × temperature product, then bait multiplies on top of the clamped value. With the default 2.0 cap and a 2.5× bait, one species can reach 5× — bait is the single strongest lever in the system.
The baseline pool
With every multiplier neutral, the odds are just abundance ÷ total abundance. This is the floor everything else moves away from:
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, rod | Abundance | Odds | Salt water, rod | Abundance | Odds |
|---|---|---|---|---|---|
| Fathead Minnow | 25 | 5.77% | Mackerel | 22 | 7.31% |
| Carp | 22 | 5.08% | Walleye Pollock | 20 | 6.64% |
| Bluegill | 22 | 5.08% | Flathead Mullet | 18 | 5.98% |
| Yellow Perch | 21 | 4.85% | Pacific Cod | 16 | 5.32% |
| Sunfish | 20 | 4.62% | Roughneck Rock / White Grunt | 14 | 4.65% |
| …33 more species… | — | — | …22 more species… | — | — |
| Lake Sturgeon, Severum, both rare muskies | 3 | 0.69% | Atlantic Blue Marlin | 3 | 1.00% |
| — | — | — | Great White Shark | 2 | 0.66% |
| Junk (4 wellies + 1 pot) | 25 | 5.77% | Junk (same table) | 25 | 8.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.
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.
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:
| Conditions | Components | Raw | Applied |
|---|---|---|---|
| Clear day | 1.00 | 1.000 | 1.000× |
| Rainy day | 1.25 × 1.00 | 1.250 | 1.250× |
| Stormy day | 1.50 × 1.00 | 1.500 | 1.500× |
| Clear night, new moon | 1.15 × 0.90 | 1.035 | 1.035× |
| Clear night, full moon | 1.15 × 1.20 | 1.380 | 1.380× |
| Stormy dawn | 1.50 × 1.10 | 1.650 | 1.650× |
| Rainy night, full moon | 1.25 × 1.15 × 1.20 | 1.725 | 1.725× |
| Stormy night, full moon | 1.50 × 1.15 × 1.20 | 2.070 | 2.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 band | rainfall 0.4 clears RainThreshold 0.3 but not StormThreshold 0.7 → rain applies | × 1.10 |
| Time window | hour 12 falls in Day (07–17) → the species' own day multiplier | × 1.20 |
| Temperature | 25 °C is its optimum — peak of the tent | × 1.00 |
| speciesMul | 1.10 × 1.20 × 1.00 = 1.32, under the 2.0 cap | 1.32 |
| Bait | worm vs. the panfish category — its joint best pairing | × 2.00 |
| weight | round(1000 × 1.32 × 2.00) | 2640 |
| Contribution | 22 abundance points × 2640 | 58 080 |
| Odds | 58 080 ÷ 327 929 pool total | 17.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:
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.
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.
Two practical readings of that curve:
- Players: a run of boots is information, not bad luck. The water is outside what the local fish tolerate — move to different water, wait for a different season, or fish at a different hour.
- Admins: turning the temperature system on raises junk rates on cold maps, because nothing scales junk down alongside the fish. On a winter map, either lower the junk entries'
CatchProbabilityor set a positiveWaterTempOffsetto bring the whole curve back into range.
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:
| Event | Per catch | 100 | 500 | 1 000 | 5 000 | 10 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% |
| Treasure | 0.02% | 2.0% | 9.5% | 18.1% | 63.2% | 86.5% |
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.
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:
| Container | Weight | Chance | Slots | Mean slots |
|---|---|---|---|---|
| Dry Bag (black) | 3.0 | 50.0% | 1–3 | 2.0 |
| Wooden Crate | 2.0 | 33.3% | 2–4 | 3.0 |
| Sea Chest | 1.0 | 16.7% | 3–6 | 4.5 |
| Expected items per treasure | 2.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:
| Item | Weight | Per slot | Appears in a haul |
|---|---|---|---|
| Rag | 6.0 | 20.7% | 46.1% |
| Nails (5–30) | 5.0 | 17.2% | 39.8% |
| Rope | 4.0 | 13.8% | 32.9% |
| Duct Tape | 3.0 | 10.3% | 25.6% |
| Fishing Hook | 3.0 | 10.3% | 25.6% |
| Canteen / Screwdriver / Matchbox | 2.0 each | 6.9% | 17.7% |
| Compass | 1.0 | 3.4% | 9.2% |
| Binoculars / Black Caviar | 0.5 each | 1.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:
- A per-species table with columns for rain/storm, window, time multiplier, temperature multiplier, combined weather multiplier, bait multiplier and final scaled weight — the exact inputs to the formula above.
- The assembled pool, listing every eligible species with its weight, environment mask, method mask and abundance. This answers "why isn't fish X spawning" directly, because a fish absent from the list failed a gate.
- Every clamp, logged the moment it happens, so a multiplier that isn't behaving is visible rather than inferred.
- The draw itself — roll, pool total, and which species won.
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:
| Container | Holds | What it preserves |
|---|---|---|
| Worm Container | Worms, grubs | Pauses the live-bait death clock |
| Bug Container | Insects | Pauses the live-bait death clock |
| Cooler | Anything | Pauses food rot and the live-bait clock |
| Bait Bucket | Small aquatic catches only — minnows, crayfish, shrimp, frogs, salamanders | Stops them rotting. Not a live-bait keeper |
| Tackle boxes | Anything | Nothing. 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.
- Roughly 1 in 5000 catches by default. That's catches, not casts — failed casts cost you nothing. A session that lands 60 fish has about a 1.2% chance of seeing one
- Only on a real fishing rod. The crafted improvised rod is a stick and a length of rope — it never even rolls. The vanilla rod and all four gebsfish colour rods qualify
- It wrecks your rod. Winching a loaded container up costs the rod a third of its maximum health — three treasures ruin a pristine rod, and one already worn from ordinary fishing gives out sooner. Bring a repair kit or a spare
- The container appears at your feet, since they're generally too big for a pocket, and a message tells you it happened
- Contents differ every time. Each slot in the container rolls the loot pool independently, so two identical chests won't hold the same things
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.
- Craft it from 1 Wooden Plank + 1 Metal Wire, with a Hacksaw on you. Combine the plank and wire; the saw is not consumed but does take durability, and the craft is refused without one.
- Place it by holding to place, then aiming at a wall — it snaps flat and hangs 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, so a personal best stays a personal best.
- Mounted fish never rot. Decay is paused entirely while the fish is on the plaque.
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:
general.json— global settings, weather, moon, temperature, predators, recipe toggles, hook recovery, per-action net/dig tablesfish.json— all 79 species, one row eachbait.json— the bait/lure preference matrixjunk.json— junk catch tables
How config updates work
This decides which of your edits survive a mod update, so it is worth understanding once:
- Each file carries its own
ConfigVersion. A file is only rewritten when something actually changed — a fresh generation, a re-seeded section, or a version bump. An up-to-date file is left completely alone. - A version bump rewrites all four files, even if only one gained anything. Your values are carried through untouched: the file is re-serialized from what was loaded, not regenerated from defaults.
- Your values are never overwritten. Updates are strictly additive — missing default entries get inserted, existing entries are left exactly as you set them.
- Deleting an entry does not disable it. A row you remove counts as missing and gets re-added on the next version bump. Set its weight / chance /
CatchProbabilityto0instead — that survives every update.
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
- CF is required on both sides. Server-only installs will not work.
- A version bump rewrites all four config files, not just the one that changed. Values are preserved — the timestamps changing is expected, not data loss.
- Economy XML is not merged for you. The generated types must be copied into your mission or nothing spawns.
- There is no migration from
fishingsettings.json. Upgrading from pre-3.3 archives the old layout into$profile:Gebs/gebs_oldfiles/for reference and generates fresh defaults — re-apply your tuning by hand. - Fish quality defaults to 1.0 deliberately, because DayZ-Expansion-Market, TraderPlus and Dr. Jones only accept full-quality items. Lower
FishQualityonly if your trader scales price by quality. - Logs older than 3 days are deleted at startup. Archive anything you want to keep.
- Disabled systems keep their tuned values in JSON with no in-game effect, so toggling one off never loses your numbers.
Frequently Asked Questions
What do I need to run Gebsfish?
Where are the config files?
$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?
Why isn't fish X spawning?
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?
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?
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?
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?
"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?
FishQuality in general.json.How do I add the fish to my server's economy?
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?
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?
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?
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?
Can I turn predators off (or up)?
Does Gebsfish work on custom maps?
Can I put Gebsfish in my server pack / mod pack?
Can I monetize my server while running Gebsfish?
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_Meleeadded 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 globalWaterTempOffsetshifts 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
BiteSpeedcurve 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_SpinnerBaitcoversgeb_SpinnerBait1-4; an exact numbered entry still overrides). Roughly 700 seeded pairings, all overridable in JSON, masterEnabletoggle at the top ofbait.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:
TreasureContainersdecides what the treasure arrives as (weight, health range, and its own item count),TreasureLootdecides 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 is0.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,0disables the wear). Seeded with plain vanilla classnames so it works out of the box, and meant to be replaced. Toggle withTreasureSettings.Enable, or setChanceto 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 itsFindChance(per-attempt probability of finding anything) and a weightedCatches[]table. Tool wear still applies on a miss - Configurable net catches — net spawn table entries carry an
Environmentfield (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.jsonreplaced 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
Speciesrow 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
ConfigVersionstamp 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,junkandfisheven 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 /
CatchProbabilityto0— 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
- Each of the four files carries its own
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.CraftFishMountingeneral.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
- 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
- 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
CatchProbabilitydefaults 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
weightvalues 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
Environmentvalues 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 withg_Gamefor consistency - Removed invalid
refkeywords 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
GebWeightedPickhelper; 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;DebugLogsvalues 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
CloseFileis 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.logformat) 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/andextras/mpmissions/intogebs_oldfiles, the emptiedFish/andextras/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.
RegisterRecipehands 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
Param3usage withXmlTypeEntryclass 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 (vanillaContainer_Basealready returns true) were removed - Vanilla-fish fillet recipes (Carp / SteelheadTrout / Mackerel / WalleyePollock) collapsed from four near-identical ~40-line Init bodies into one shared
SetupVanillaFilletRecipehelper onPrepareFish— they now get the same MeatMin/MeatMax inversion guard,MAXIMUM_RESULTSclamp, and caviar-chance logic as every other fish; no-opCanDo/Dooverrides deleted - Renamed
Sturgeon->LakeSturgeon;OldTacklemodel files ->MediumTackle(class names finalized next wipe); Bug Container moved fromdata/tools/todata/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
YieldItemBaseconstructor that made every yield item runInit()twice per construction - All p3ds now use a
Camohidden 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
YieldItemBaseandRecipeBaseconstructors callInit()themselves, soInit()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 ownPrepare*overrides). Setup now applies from the setter instead of relying on constructor-timeInit() - Clients registered zero fillet recipes: the config left the Species table null on clients until the
ConfigSyncRPC, which lands afterPluginRecipesManagerhas 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
ProxyAttachmententries that bind each proxy to its slot. They must live inCfgNonAIVehicles; incfgVehiclesthe 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:
placingwas listed inhiddenSelections[]but never declared as a section inModel.cfg, so the hologram material had no swappable selection to land on. The deployable/undeployable materials also needed vanilla'sSupershader and full stage chain — flatNormal/Basicwith 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:
EvaluateCollisionrejected it throughIsFloating,IsBaseViable,IsClippingRoofandHeightPlacementCheck, all of which assume ground placement, andyawPitchRollLimitcapped 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.
BoatScripthardcodes Boat_01 soundsets for every boat, so the jon boat now has its own script class that suppresses it - XML generator crash at startup:
FPrintwithout 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
CatchProbabilitytwice (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
AddHealthcall 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
.2finstead 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
MeatMaxin 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
Camowhere missing;FlatHeadMulletclassname 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.jsonand its one-time migration (replaced by the four-file config, clean break)- Bundled trader/economy support files (
Expansionmarket configs, TraderPlus configs, Dr. Jones price list, classnames list, pricing calculator) - Old expansion files
- Old README
- Fishing Calc (outdated)
- Old
newtackletextures - 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