59 species of real-world and fictional serpents inhabiting every biome, cave, ocean, dimension, and ancient ruin of your Minecraft world.
59 SpeciesBiome-Accurate SpawningVenom SystemRattle SystemNether & EndDeep Dark / Ancient CityCave SnakesAquatic Snakes3 Apex Giants
About
SnakePlugin adds 59 species of snakes across every biome, cave, ocean, and dimension. Each has its own habitat, pattern, size, behaviour, and prey list — from the docile Corn Snake winding through plains to the three apex giants haunting the deepest corners of the world.
Snakes are fully silent — no husk groans, no wolf barks. Their base entity sounds are suppressed so only the rustle of movement and the hiss of venom (and the rattlesnake's rattle) remain.
Every species is placed ecologically — cottonmouths in swamps, rattlesnakes in their native deserts and forests, sea snakes in their warm-water ranges, and the apex giants confined to the Deep Dark, the swamp, and the deep desert respectively.
Snakes are no longer chase-everything mobs. The temperament system added in v2.1.3 means hostile species no longer roam-aggro players from a distance. Most snakes will only target a player who steps within striking range or who attacks them first; only the meanest species (Black Mamba, Eastern Brown Snake, the cobras) actively hunt humans. See Behavior & Prey for details.
Wolf-base snakes do not eat sheep. Vanilla wolf AI auto-targets passive farm animals, but every wolf-base snake species has its prey list filtered to only what it would actually eat in the wild. Garter Snakes hunt frogs, Corn Snakes hunt rabbits, Eastern Hognose hunts only frogs — your sheep, cows, and other farm animals are safe.
Naming Snakes
Any snake can be made permanent by naming it with a Name Tag. Once named, the snake survives server restarts and never despawns until killed.
Step 1Rename a Name Tag at an anvil with whatever name you want to give the snake.
Step 2Right-click the dragon-head display on the snake's head while holding the renamed tag. The head display has a real selectable hitbox the size of the rendered head — just aim at the head and right-click.
Step 3A gold chat message confirms the snake is now permanent. It will no longer despawn when you walk away and will survive server restarts.
On restartThe base entity is saved to disk (persistent=true). When its chunk loads, the plugin finds the entity, reads its snake:TYPE tag, and spawns fresh displays around it within 2 ticks.
Snake Ward
The Snake Ward is a placeable item that repels hostile, unnamed serpents within a 20-block radius. Sold in the in-game shop for $1000, or issued directly to players with /givesnakeward.
Shop price
$1000
per ward
Radius
20
blocks from placement
Form
Lodestone
hidden NBT tag
Effect
Instant
existing snakes purged on placement
What it repels
RemovedHostile, unnamed snakes inside the radius — despawned instantly on placement and re-checked every 5 ticks thereafter.
UnaffectedNamed snakes (via Name Tag), all passive species (including the King Snake, which counts as tame), and the three apex-class species — the Ancient Serpent, Titanoboa, and Apep. A named King Cobra will happily coil next to a ward, and none of the three apex giants will be repelled by any ward.
Blocks spawnsThe natural spawner refuses to place new hostile species inside a ward's radius, so the area stays quiet over time — with three exceptions: the Ancient Serpent, Titanoboa, and Apep. All three ignore wards entirely, so the Deep Dark, deep swamps, and open desert remain dangerous no matter how many wards you place.
Genuine vs plain lodestone
A lodestone from any other source does nothing. Only the item issued via /givesnakeward carries the required PersistentDataContainer tag. In inventory it appears as:
Item appearance
Snake Ward— gold bold Repels hostile serpents
within 20 blocks. Named snakes are unaffected.
Place to activate.
Persistence
Active ward positions are saved to plugins/SnakePlugin/wards.yml, keyed by world UUID with block-integer coordinates. The file is rewritten on every placement, removal, and plugin disable — wards survive server restarts with no configuration needed.
Breaking a ward
Breaking an active ward with any pickaxe drops the Snake Ward item itself, not a plain lodestone — so the shop item is reusable and inventory accounting stays clean. Explosions will destroy the block but do not guarantee an item drop.
Behavior & Prey System
Every species declares a temperament and a prey list. The temperament controls how the snake reacts to players; the prey list controls which mobs the snake will actively hunt as food. Both override vanilla husk and wolf AI through a per-tick safety pass plus an EntityTargetEvent listener that cancels disallowed targets at the source.
The v2.1.4 update fixed two long-standing bugs: snakes that listed BAT or PARROT as prey weren't actually pursuing them (a 2-block height filter intended for phantoms was rejecting all aerial mobs). And the Coral Snake had broken prey (set to SILVERFISH which is excluded server-side because the Bedrock bridge spawns silverfish proxies). Both are fixed — aerial-prey species now actually engage their prey, and Coral Snake eats FROG. Also several species got biology-accurate prey expansions (Cottonmouth, Green Anaconda, African Rock Python, Yellow Anaconda) and three more species now hunt other snakes (Indian Cobra, Cape Cobra, Eastern Brown Snake) joining the existing snake-eaters (King Cobra, Forest Cobra, King Snake, California Kingsnake, Eastern Indigo Snake, Titanoboa).
Five Temperaments
passiveNever targets players or mobs outside its prey list. Wolf-base wandering animals. Will not eat your sheep. Used by 14 species: Corn Snake, Ball Python, Garter Snake, Eastern Indigo Snake, California Kingsnake, etc.
defensiveHunts prey at full range, but never targets players unprovoked. Will retaliate if attacked. Used by the shy heavy-hitters — Inland Taipan (most venomous land snake but extremely shy), Reticulated Python, Burmese Python, Coral Snake, Yellow Sea Snake. 12 species.
territorialHunts prey at full range, targets players only within 6 blocks. Strikes when stepped near. Used by most rattlesnakes, vipers, cottonmouth, the heavier vipers, anacondas. 19 species.
aggressiveTargets players from full follow-range like vanilla husk — this is the "mean" tier. Black Mamba, Eastern Brown Snake, King Cobra, Forest Cobra, Indian Cobra, Egyptian Cobra, Russell's Viper, Saw-scaled Viper, Fer-de-lance, Nether Viper, Ender Serpent. 11 species.
apexHunts every living thing in 50-block range, ignores all filters. Three species — the apex giants: Ancient Serpent, Titanoboa, Apep.
Prey Mapping
Each species' prey list is mapped from real biology to vanilla Minecraft entities. A few examples that line up cleanly:
Inland Taipaneats only rodents in real life → only targets Rabbits. Will completely ignore your livestock.
Eastern Hognoseobligate amphibian eater → only targets Frogs. Will not touch chickens or rabbits.
Green Anacondatrue generalist — eats anything it can wrap around → targets Pigs, Cows, Sheep, Goats, Foxes, Rabbits, Chickens, Salmon, Cod, Axolotls, Frogs, Turtles. Bring it down with ranged.
Black Mambaeats small mammals and bats from rock piles → targets Rabbits, Chickens, Bats. The bat-targeting actually works in v2.1.4 — the height filter that broke aerial prey was fixed.
Cave Racercave-adapted hunter → targets Bats. Lives in Deep Dark and Lush Caves; ambushes bat colonies.
Green Tree Pythoncanopy ambusher → targets Parrots, Bats, Chickens. v2.1.4 fixed the height filter so it actually goes for parrots in trees instead of ignoring them.
Sea Kraiteats reef fish → targets Cod, Salmon, Tropical Fish. Won't bite your boat unless you swim into it.
Coral Snakesmall-vertebrate eater → targets Frogs. (Real coral snakes eat lizards and small snakes; Frog is the closest small-vertebrate Minecraft has. Old prey was broken in v2.1.3.)
Snake-Eating Species (Ophiophages)
Several species hunt other snakes as their primary or secondary food. They one-shot any non-apex snake on contact — the same bite-and-constrict logic the King Snake has used since v2.1.0. Apex giants (Ancient Serpent, Titanoboa, Apep) are immune to all snake-eaters.
Obligate snake-eatersKing Cobra (80%+ of diet is other snakes IRL), King Snake and California Kingsnake (immune to pit-viper venom IRL), Eastern Indigo Snake (federally protected snake-eater). Hunt other snakes preferentially.
Opportunistic snake-eatersIndian Cobra, Forest Cobra, Cape Cobra, Eastern Brown Snake. Hunt regular vertebrate prey AND other snakes when they encounter them. Eastern Brown will take Inland Taipan when ranges overlap, just like in real life.
Apex snake-eaterTitanoboa. Specifically locks onto Green Anaconda (its real-life prehistoric prey) plus apex bypass for everything else.
How the Override Works
Three layers, defence in depth:
Layer 1 — EntityTargetEvent listener. Vanilla husk AI auto-targets the nearest player; vanilla wolf AI auto-targets sheep, foxes, rabbits via WolfTargetGoal. Both fire EntityTargetEvent before they commit. The plugin listens at the default priority and cancels the event if the target isn't allowed by the species' temperament + prey list.
Layer 2 — per-tick tickTargetSafety(). Some vanilla goal memory caches targets across ticks. Once per tick, every snake checks mob.getTarget() and nulls it if the temperament + prey filter would forbid it. This catches anything that slipped through the event layer.
Layer 3 — huntTarget() active scan. Aggressive, territorial, and defensive species actively scan their hunt range each tick for prey that's in their list, then call mob.setTarget(). This is what makes a Black Mamba actually chase a bat instead of just permitting an existing bat target. The v2.1.4 fix here was relaxing the 2-block height ceiling for entries that are explicitly in the prey list, so aerial prey (BAT, PARROT) is reachable.
Result: a hostile snake on the path you're walking will let you pass unless you step within striking range. A wolf-base snake spawning next to your sheep pen will ignore the sheep and wander off. A Black Mamba will actually chase the bat in your bat colony instead of pretending it doesn't exist.
Rattle System
Real rattlesnakes have keratin segments at the tip of their tails that produce a dry buzzing rattle when shaken. The plugin recreates this with a flag on each species — .rattle() — that adds extra Calcite + Diorite display segments past the body tail, animated each tick with random jitter, and triggers an audible BLOCK_BONE_BLOCK_HIT sound when a target is within 4 blocks.
Visuals
Segment count4 extra display segments past the body tail
Scale80% of body segScale — visually tapers off the tail
Spacing70% of body segSpacing — tighter cluster than the body for the segmented-rattle look
Jitterper-tick random offset on all three axes, scaling stronger toward the tip — the very last segment shakes hardest
Auto-scalingthe rattle's physical size is derived from the species' segScale, so a Pygmy Rattler (0.12 thickness) has a tiny rattle while an Eastern Diamondback (0.22 thickness) has a much chunkier one
Audio
When the snake has a target within ~4 blocks (provoke range for territorial species, melee range for aggressive ones), it emits the rattle sound at volume 0.7, pitch 1.6 every 6 ticks. Quiet enough not to dominate ambient sound but unmistakable when nearby. Players who learn to recognize it can back off before getting bitten.
Species with Rattles
All eight rattlesnake species in the plugin carry .rattle():
Three planet-scale snakes at the top of the food chain. Apex temperament — they hunt every living thing within their range. All three ignore Snake Wards and are immune to all venom. King Snakes will not target them.
Ancient Serpent
Fictional · Deep Dark, Ancient City
/spawnsnake giant_serpent
size~90 ft in lore · 50 display segments · head 2.0× / body 1.8× scale (oversized)
baseHUSK (invisible) · husk-scale 1.5
temperamentapex
speed0.38
combat40.0× base HP · attack 60.0
follow range300.0 blocks
min depthY ≤ -20 required
venomPoison II · 10sWither I · 5sDarkness I · 5s
preynone (hunts only by temperament)
undergroundYes — spawns below sea level / in caves
notesExtinct 60M years. Apex of swamp / mangrove. Hunts Green Anacondas.
Apep
Egyptian mythology · Desert / Badlands
/spawnsnake apep
size~80 ft in lore · 48 display segments · head 1.9× / body 1.7× scale (oversized)
baseHUSK (invisible) · husk-scale 1.4
temperamentapex
speed0.36
combat35.0× base HP · attack 50.0
follow range250.0 blocks
venomPoison III · 10sBlindness I · 5sSlow II · 5sHunger I · 10s
preynone (hunts only by temperament)
ward immunityIgnores Snake Wards entirely
latinEgyptian mythology
regionDesert / Badlands
patternRed Sand, Smooth Sandstone, Orange Terracotta, Red Sand, Red Terracotta, Smooth Sandstone
biomes
desertbadlandseroded_badlandswooded_badlands
notesMythological serpent of chaos. Apex of the open desert.
Aggressive Species (11)
These will come at you. Aggressive temperament means they target players from full follow-range like vanilla husk AI. Mean species — the cobras, the mambas, the Australian browns.
King Cobra
Ophiophagus hannah · South / Southeast Asia
/spawnsnake king_cobra
size19 ft · 87 segments × 0.22 thickness · ~19.1 blocks long in-game
baseHUSK (invisible) · husk-scale 0.40 (default)
temperamentaggressive
speed0.27
combat5.0× base HP · default attack
venomPoison II · 7sSlow II · 4s
preyRabbit
hunts snakesYes — targets any other snake species (except apex giants)
latinOphiophagus hannah
regionSouth / Southeast Asia
patternBrown Concrete, Yellow Terracotta, Oak Log, Yellow Terracotta
notesPhases between End islands. Causes Levitation + Blindness.
Territorial Species (19)
Strikes when stepped near. Territorial temperament means they hunt prey from full range but only attack players within ~6 blocks. Walk past at distance and they ignore you. All eight rattlesnake species carry an audible rattle warning before striking.
Desert Horned Viper
Cerastes cerastes · North Africa, Middle East
/spawnsnake desert_horned_viper
size2.5 ft · 17 segments × 0.15 thickness · ~2.5 blocks long in-game
baseHUSK (invisible) · husk-scale 0.40 (default)
temperamentterritorial
speed0.26
venomPoison I · 4s
preyRabbit, Chicken
latinCerastes cerastes
regionNorth Africa, Middle East
patternSmooth Sandstone, Orange Terracotta, Brown Terracotta, Orange Terracotta
patternGreen Terracotta, Moss Block, Gray Concrete, Green Concrete
biomes
warm_oceanlukewarm_oceandeep_lukewarm_ocean
notesReef-dwelling true sea snake.
Defensive Species (12)
Won't come at you unprovoked. Defensive temperament — hunts prey at full range but never targets players unless attacked first. Big pythons, smaller anacondas, shy elapids.
Reticulated Python
Python reticulatus · Southeast Asia
/spawnsnake reticulated_python
size25.7 ft · 86 segments × 0.30 thickness · ~25.8 blocks long in-game
baseHUSK (invisible) · husk-scale 0.40 (default)
temperamentdefensive
speed0.22
combat7.0× base HP · attack 13.0
venomnone
preyPig, Cow, Sheep, Goat
latinPython reticulatus
regionSoutheast Asia
patternYellow Terracotta, Brown Concrete, Black Concrete, Yellow Concrete
biomes
junglebamboo_junglesparse_junglemangrove_swamp
notesWorld's longest snake by length. Eats deer-sized prey.
Burmese Python
Python bivittatus · SE Asia, invasive Florida
/spawnsnake burmese_python
size18.8 ft · 67 segments × 0.28 thickness · ~18.8 blocks long in-game
baseHUSK (invisible) · husk-scale 0.40 (default)
temperamentdefensive
speed0.22
combat6.0× base HP · attack 11.0
venomnone
preyPig, Sheep, Goat, Rabbit
latinPython bivittatus
regionSE Asia, invasive Florida
patternBrown Concrete, Oak Planks, Yellow Terracotta, Brown Terracotta
patternYellow Concrete, Green Concrete, Yellow Terracotta, Light Gray Concrete
biomes
warm_oceanlukewarm_oceandeep_lukewarm_ocean
notesHighly venomous but very docile.
Passive Species (14)
Friendly to everything. Passive — never targets players, never targets non-prey mobs. Wolf-base species. The temperament system blocks vanilla wolf sheep/cow auto-aggression — these will never destroy your farms. Some passives still actively hunt their prey list (King Snake, California Kingsnake, Eastern Indigo — ophiophages that hunt venomous snakes).
Corn Snake
Pantherophis guttatus · Eastern, Central NA
/spawnsnake corn_snake
size6 ft · 38 segments × 0.16 thickness · ~6.1 blocks long in-game
baseWOLF (invisible) · husk-scale 0.40 (default)
temperamentpassive
speed0.22
venomnone
preyRabbit, Chicken
latinPantherophis guttatus
regionEastern, Central NA
patternWhite Concrete, Orange Concrete, Red Concrete, Orange Concrete
patternGray Concrete, Brown Concrete, Light Gray Concrete, Black Concrete
biomes
warm_oceanlukewarm_oceanrivermangrove_swamp
notesFully aquatic. Almost helpless on land.
The Serpent King — Boss
Beyond the 59 species in this plugin, a separate plugin — SerpentKing — adds a fourth-tier boss that is not a SnakePlugin species at all. Same sculk palette as the Ancient Serpent, scaled up to a 100-block flying boss with no bossbar and no on-screen popups. Lives permanently in a private deepslate-and-lava arena (the Hellscape) reachable only through the Snake Pit Tower with a $10,000 challenge ticket.
Java and Bedrock edition players can share the same server via Geyser & Floodgate. Snakes in this plugin are built from Java BlockDisplay entities with custom transformations (scaled blocks positioned and rotated per segment). The Bedrock Edition protocol has no equivalent — display-entity transformations do not translate — so Bedrock players would, by default, see nothing where a snake should be.
The companion plugin SnakeBedrockBridge solves this by spawning an invisible proxy silverfish at each snake's location. Bedrock clients render the silverfish natively and honour the minecraft:scale attribute, so a Bedrock player sees a size-appropriate creature where a Java player sees the full snake body.
What each edition sees
Java playersSee the normal snake — full BlockDisplay body, dragon-head marker, segments, all species-specific textures. Zero visual change with or without the bridge plugin installed.
Bedrock playersSee a scaled silverfish at the snake's position. Size scales with species — a Ball Python silverfish is small, a Titanoboa silverfish is enormous. The silverfish doesn't animate (no AI) but follows the snake exactly.
Serpent KingAlso proxied. Bedrock players see a maximum-scale silverfish where the Java boss flies, with the same damage-forwarding and interaction behaviour as snakes.
Hitting snakes as a Bedrock player
Attacks on the silverfish are forwarded to the real snake. When a Bedrock player swings at the silverfish, the bridge cancels damage on the silverfish itself and re-applies the same damage to the underlying snake entity, preserving knockback, attribution (drops, advancements, statistics) and the attacker relationship. Hitting the silverfish is equivalent to hitting the snake in every mechanical sense.
AoE damage (explosions, splash potions, fire, fall) hits the underlying snake naturally through its own hitbox — the bridge does not forward AoE to avoid double-damage.
Naming snakes from Bedrock
Right-clicking the silverfish with a renamed Name Tag applies the name to the underlying snake and consumes the tag — same behaviour as clicking the head display on Java. The snake becomes permanent (makePermanent()) just as it would from a Java rename, survives server restarts, and ignores wards from that point on.
Silverfish scale per species
The bridge reads each base entity's GENERIC_SCALE attribute and computes silverfish scale as clamp(huskScale × multiplier, min, max). Defaults: multiplier 4.0, min 1.5, max 8.0. Rough results:
Normal snakeshuskScale ~0.32 → silverfish 1.5 (clamped up to minimum) — comfortable target size, readable against the terrain.
Ancient SerpenthuskScale 1.5 → silverfish 6.0 — visibly dominant size in the Deep Dark.
Serpent KinghuskScale 2.5 → silverfish 8.0 (clamped to maximum) — boss-scale hitbox that Bedrock players can actually target.
Under the hood
The bridge uses a single reconciliation loop that runs every tick. It walks all loaded entities in every world, finds any with the snake_entity or serpent_king tag, and ensures each has exactly one silverfish proxy at its current location. New snakes are discovered within one tick; gone snakes have their silverfish removed within one tick; desynced silverfish are snapped back immediately. No discovery latency, no state drift.
Silverfish packets are filtered via PacketEvents: every outbound packet referencing a proxy silverfish is cancelled for non-Floodgate recipients. Java clients never learn the silverfish exists, which is why Java players experience zero visual change.
Requirements
The bridge requires PacketEvents and Floodgate on the server. If you already run Geyser for Bedrock access, Floodgate is almost certainly already installed. PacketEvents is commonly present for anticheat or combat plugins (e.g. Vulcan). The bridge loads gracefully if SnakePlugin or SerpentKing is absent — it simply has nothing to proxy.
// Staff Only — requires snake.admin permission
Admin Commands
Every command below requires the snake.admin permission (granted to server operators by default). All are safe to execute from the server console, so shop, GUI, and automation plugins can call them after a player action.
Spawning & Management
/spawnsnake <species>
Spawn a specific snake species at your feet. Tab-completion lists all 19 species names.
Remove all currently tracked snakes and every one of their display entities. Only affects plugin-tracked entities — safe to run at any time.
/listsnakes
Print all 19 species in chat with their hostile/passive flag, venom, aquatic, and fire-venom properties.
/refreshsnakes
Force-rebuild display entities for every tracked snake. Useful after running /kill @e[type=block_display]. Normally not needed since snakes self-rebuild each tick.
Spawn Rate Tuning
/snakespawnrate [cap|attempts|interval] [value]
View or adjust the natural spawn rate. With no arguments, prints current values. Set one of:
cap <n>Max snakes visible near a player — default 6.
interval <s>Seconds between spawn cycles — default 90. Changing this restarts the spawn timer live.
Example: /snakespawnrate cap 10 · /snakespawnrate interval 30
Shop & Items
/givesnakeward [player] [amount]
Issue the Snake Ward item — the special lodestone that repels hostile, unnamed snakes within 20 blocks when placed. Safe from console, so any shop plugin can run it after a $1000 purchase. Tab-completes to online player names.
Shop integration: run givesnakeward <player> 1 as console · Example: /givesnakeward Steve 3
Bedrock Bridge (SnakeBedrockBridge plugin)
Only present if SnakeBedrockBridge is installed. Requires permission snakebridge.admin (default op). See the Bedrock Compatibility section for what this plugin does.
/snakebridge status
Show the number of active silverfish proxies, the current scale multiplier and clamp range, and whether right-click interaction forwarding is enabled. Useful for verifying the bridge is doing what you expect.
/snakebridge reload
Re-read plugins/SnakeBedrockBridge/config.yml and re-scale every currently-tracked silverfish. Use after editing the scale multiplier / min / max values to apply them without a server restart.
/snakebridge cleanup
Scan all loaded chunks for proxy silverfish that the bridge isn't tracking (leftovers from a previous session, crash, or reload) and remove them. Called automatically at plugin enable — this command just triggers it on demand.
/snakebridge nuke
Emergency use. Force-removes every silverfish with the proxy tag in every loaded world — tracked or not. Bypasses invulnerability. The reconcile loop will respawn fresh silverfish for any still-alive snake bases on the next tick, so this is safe to run: at most you get a one-tick flicker where Bedrock players briefly see nothing. Use when ghost silverfish are visible and /kill @e[type=silverfish] isn't touching them.
When to use: after a crash, after a rapid plugin reload cycle, or when you notice a desynced silverfish that refuses to die.