August 2023
Arkus's Fishing
An exciting expansion of Minecrafts fishing mechanics. Made with the Minecraft Forge API, Java, and GIMP.
Fishing in minecraft has missed potential. There are only 4 varieties of fish you can catch, and all of them can be caught anywhere. Fishing is unaffected by time, weather, biome, or dimension. The only exception is bamboo, which can be fished up in the jungle. This outlier gave me the idea to make a mod where the player could catch different fish depending on which biome they're in. After all, since the game already had code to determine fishing loot based on biome, how hard could it be to reuse that code for something interesting?

I created this mod using the Minecraft Forge modding API, which contains a decompiled and deobfuscated version of minecrafts source code. I wrote new code, reused code from areas of the game, in both java and JSON files. I also created all the textures myself, using GIMP, a free open source image manipulation software similar to photoshop. You can find the full project on my github here.
New Items
all items in the mod

When adding new fish, I wanted a few basic ones to make each biome interesting. I wanted to to make fishing exciting, and encourage players to seek out every fish variety, or at least to try fishing when they entered a new environment. I did this by creating many fish with unique effects, requirements to catch them, or that could be used to craft unique items. To keep the games progression system balanced, everything you can get from fishing fits in with the early to mid game progression.

Arkus's Fishing adds 23 new fish varieties to catch, and 7 new items that can be made from the items you fish up. Below is a full list of all the new items.

New Items
Item Name Description How to obtain it Use
Bass Bass

A fish caught in muddy warm biomes

Fishing in desert, jungle, plains, swamp and river biomes

Cooked into large cooked fish

Trout Trout

A fish commonly caught in shallow waters.

Fishing in beach, cold, plains, and river biomes

Cooked into small cooked fish

Toothfish Toothfish

A fish based on the antarctic toothfish

Fishing in cold biomes

Cooked into large cooked fish

Goldfish Goldfish

A literal gold fish.

Fishing anywhere

Smelted into a gold ingot

Jellyfish Jellyfish

A slimy fish from the sea

Fishing in beach, tropical, and ocean biomes during rainy weather

Crafted into a slimeball. Affects the player with hunger when eaten

Tigerfish Tigerfish

A fish based on the african tigerfish

Fishing in desert and jungle biomes

Cooked into large cooked fish

Frozen Trout Frozen Trout

A trout who was frozen solid

Fishing in cold biomes

Cooked into trout, crafted into an ice block

Tuna Tuna

A large fish from the ocean

Fishing in beach and ocean biomes

Cooked into large cooked fish

Coalacanth Coalacanth

From the ancient past, this fish has aged into coal

Fishing in caves and desert biomes

Used as a fuel source. Smelts 6 items

Catfish Catfish

A bottomfeeder with a big mouth

Fishing in jungle, river, and swamp biomes

Cooks into small cooked fish

Sturgeon Sturgeon

A large rare fish

Fishing in river biomes

Cooks into large cooked fish

Moray Eel Moray Eel

A large colourful eel

Fishing in tropical and swamp biomes

An ingredient in eel soup

Cave Eel Cave Eel

A pale unsightly eel

Fishing in caves

An ingredient in eel soup. Affects the player with weakness when eaten

Charged Eel Charged Eel

An electric eel, similar to Minecrafts charged creeper

Fishing in beach, tropical, ocean, plains, and river biomes during a thunderstorm

An ingredient in TNT. Causes damage when eaten

Red Fungi Fish Red Fungi Fish

A small fish covered in red mushrooms

Fishing in mushroom islands and swamp biomes

Crafted into red mushrooms, cooked into small fish, an ingredient in mushroom stew. Affects the player with weakness when eaten

Brown Fungi Fish Brown Fungi Fish

A small fish covered in brown mushrooms

Fishing in mushroom islands and swamp biomes

Crafted into brown mushrooms, cooked into small fish, an ingredient in mushroom stew. Affects the player with slowness when eaten

Sunfish sunfish

A huge flat fish

Fishing in tropical and ocean biomes during the day

Cooked into large cooked fish

Moonfish moonfish

A silvery sunfish with a crescent moon shaped tailfin

Fishing in tropical and ocean biomes during the night

An ingredient in moon clocks. Affects the player with night vision when eaten

Swordfish Swordfish

A large fish in the style of a Minecraft sword

Fishing anywhere

Effectively the same as an iron sword. Can be already enchanted when fished up. Cooked into large fish

Small Cooked Fish Small Cooked Fish

A small portion of cooked fish

The result of small or barely edible fish in a furnace, smoker, or campfire

Can be eaten to restore 2.5 hunger bars, and 6 saturation

Large Cooked Fish Large Cooked Fish

A large portion of cooked fish

The result of large fish in a furnace, smoker, or campfire

Can be eaten to restore 4 hunger bars, and 11.2 saturation

Eel Soup Eel Soup

A hearty dish made from eels

Crafted using a moray eel, cave eel, and a bowl

Can be eaten to restore 4 hunger bars, and 13 saturation. Becomes an empty bowl when eaten

Rotating display of 8 moon clock textures Moon clock

A silvery clock that displays the phases of the moon

Crafted using a moonfish, starfish, iron ingots, and redstone

Displays the current phase of the moon

Starfish Starfish

A starfish. Originally named "fallen starfish"

Fishing in beach and cold biomes

An ingredient in the moon clock, and starfish block

Sea Urchin Sea Urchin

A small spiny creature

Fishing in beach, tropical, and ocean biomes

Can be thrown at entities, damaging them

Sea Urchin Block Giant Urchin

A huge spiny creature

Fishing in beach, tropical, and ocean biomes

Can be placed. Causes damage on contact, like a cactus. When placed outside of water, it will quickly die, transforming into a dead urchin block

Starfish Block Starfish Block

A block of coral, covered in glowing starfish

Crafted from coral and starfish

Can be placed. Acts as a light source

Dead Urchin Block Dead Urchin Block

A giant urchin that dried out and lost its spines.

The result of leaving a giant urchin block outside of water

Can be placed. Can be crafted into bonemeal. An ingredient in urchin lanterns

Urchin Lantern Urchin Lantern

The jack 'o' lantern version of a dead urchin

Crafted from a dead urchin block and a torch

Can be placed. Acts as a light source

The vanilla fishing system
In vanilla minecraft, fishing is calculated through loot tables in JSON files. When a player casts their fishing rod, the game runs the main fishing loot table, randomly selecting the 'fish', 'junk', or 'treasure' loot table. Each element in a loot table has a weight associated with it, the chance that that element gets selected. the 'fish' loot table has an 85% chance of being selected, 'junk' has a 10% chance, and 'treasure' has a 5% chance. If the players fishing rod is enchanted with the Luck of the Sea enchantment, the weight for the 'treasure' loot table is increased, and the weight for the 'junk' loot table is decreased. There are several checks that can be preformed before an element in a loot table is selected, such as the biome the player is in, the weather, dimension, and even how many in-game days have passed.
How I modified the fishing system
Editing the main fishing loot table, I kept the 'junk' and 'treasure' loot tables, but replaced the more general 'fish' loot table with a new table, which I called I called "fishing_biome'. This table condensed the list of nearly 60 biomes in minecraft into 11 biome sub categories. Each of these 11 biome categories has its own loot table, filled with different fish that seem appropriate for that biome type. When selected by the main fishing loot table, the fishing biome table would see which biome the player was in, and return the loot table corresponding to it. Some biomes fit into multiple categories, such as the frozen ocean biome, which I categorized as both 'ocean' and 'cold'. In cases like these, the fishing biome table randomly selected which of the possible loot tables to use.

In addition to biome specifications, some fish require certain weather or time conditions to be caught. This was done by including these conditions inside of the weighting system of each biome loot tables. The weighting system for each biome allowed me to make some fish more rare than others, for example, trout are quite common, and sturgeons are very rare.

I wanted to include something in both the junk and the treasure tables, as fish that could be caught anywhere, with the chance of catching them affected by Luck of the Sea. Goldfish appear in the treasure table, because gold is quite valuable. Swordfish appear in the junk table, because they are most useful for early and midgame players, without access to higher tiers of swords. Endgame players are likely to find swordfish useless, and as swordfish are tools, they are unstackable and could clog up players inventory. By having them in the junk table, endgame players with Luck of the Sea are less likely to fish them up and become frusterated with fishing.
Biome Categorization
Biome Category Biomes in it
Beach Beach, Mushroom fields, Stoney shore
Cave Deep dark, Dripstone caves, Lush caves
Cold Deep frozen ocean, Frozen ocean, Frozen peaks, Frozen river, Ice spikes, Jagged Peaks, Snowy beach, Snowy slopes, Snowy taiga, Stoney peaks, Windswept gravelly hills
Tropical Warm ocean
Desert Badlands, Desert, Eroded badlands, Savanna, Savanna plateau, Windswept savanna, Wooded badlands
Jungle Bamboo jungle, Jungle, Mangrove swamp, Sparse jungle
Mushroom Island Mushroom fields
Ocean Cold ocean, Deep cold ocean, Deep frozen ocean, Deep lukewarm ocean, Deep ocean, Frozen ocean, Lukewarm ocean, Ocean
Plains Birch forest, Cherry grove, Dark forest, Flower forest, Forest, Grove, Meadow, Old growth birch forest, Old growth pine taiga, Old growth spruce taiga, Plains, Sunflower plains, Windswept hills,
River River
Swamp Swamp, Mangrove swamp
Nether All nether dimension biomes
End All end dimension biomes