Survive what comes next.
A comprehensive difficulty overhaul for Minecraft 1.21.1 (Fabric). Tribulation transforms Minecraft's flat difficulty curve into an escalating gauntlet. Mobs grow stronger as you play longer, venture further from spawn, and delve deeper underground. Beyond raw stat scaling, the mod layers in tier-gated mob abilities, opt-in permanent death penalties, and inventory risk mechanics — all configurable, all formula-driven, zero external dependencies.
| CurseForge | GitHub Releases | Website | Report an issue |
|---|
Every hostile mob's stats are computed from four independent factors at spawn time:
- Time — Your cumulative playtime advances a per-player level (0–250, 1 hour per level). Higher level = stronger mobs near you.
- Distance — Beyond 1000 blocks from world spawn, mobs gain bonus health, damage, armor, and toughness (caps at +150%).
- Height — Deviation from sea level (Y=62) in either direction adds threat (caps at +50%).
- Moon phase — On Overworld nights, mob threat rises toward the full moon and tapers to zero at the new moon (caps at +10%); optionally surface-only.
Upstream of the four axes, per-dimension and per-biome level offsets add a flat boost to the effective level — the Nether (+25), the End (+40), and the Deep Dark (+30) by default. Biome offsets accept plain biome IDs or #-prefixed biome tags, so modded biomes and whole categories can carry their own boost.
Structure danger zones stack the same way: mobs spawning inside (or within a configurable margin of) a configured structure's bounds use a boosted effective level — fortresses and bastions (+20), ancient cities (+30), end cities (+25), monuments and trial chambers (+15) by default. Keys accept structure IDs or #-prefixed structure tags; an empty map disables the feature.
21 vanilla mob types have individually tuned scaling rates and caps. Modded hostile mobs get conservative fallback scaling automatically.
At 5 level thresholds (50/100/150/200/250), mobs unlock special behaviors:
| Tier | Level | Examples |
|---|---|---|
| 1 | 50 | Zombie reinforcements, Creeper shorter fuse |
| 2 | 100 | Skeleton sword switch, Spider web placing |
| 3 | 150 | Zombie door-breaking, Wither Skeleton sprint |
| 4 | 200 | Skeleton flame arrows, Vindicator damage resistance |
| 5 | 250 | Zombie sprinting, Creeper charged (25%), Spider leap attack |
At or above a configurable tier threshold (default tier 3), the classic pack mobs — zombies, skeletons, and spiders — fight together: hurting one alerts same-type mobs within 16 blocks (line-of-sight required) onto the attacker, and their natural spawn groups grow by +2. Radius, threshold, bonus, and the eligible-mob list are configurable via the packTactics section.
Disabled by default. When enabled via the environmentalPressure section, the world itself pushes back at high tiers — gated on each player's own level, so a low-level player on the same server is unaffected:
- Debilitating Strikes — at or above a tier threshold (default 3), a landed melee hit from a scaled hostile applies short Weakness and/or Slowness (per-effect toggles, duration and amplifier configurable)
- Oppressive Nights — at or above a separate tier threshold (default 4), hostiles scaled at night nearby spawn with keener senses (a follow-range boost, default 1.5×), and night ambient light is subtly reduced for the affected player as the tell (bounded intensity, client-side opt-out, respects the vanilla Darkness Pulsing accessibility slider)
- Death Relief — Lose 2 levels on death (rubber-band mechanic, configurable)
- Shatter Shards — Rare mob drops (0.5%) that reduce your level by 5 on use
- Level Decay (opt-in) — After a configurable grace period away from the server (default 7 days), your level decays by a configurable rate (default 2 levels/day beyond the grace window), computed on login and floored at a configurable minimum
- Hardcore Hearts (opt-in) — Permanently lose max health on each death; restore with Heart Fragments
- Soul Inventory (opt-in) — Inventory destroyed on death unless items have the Soulbound enchantment (or any enchantment in the
#c:soulboundconvention tag, e.g. Meridian's Tether) - Totem interaction — Configure how a popped Totem of Undying interacts with the penalties via the
totemssection:countsAsDeathRelief(whether a totem pop still applies the Death Relief level loss) andprotectsHearts(whether a totem pop shields you from the Hardcore Hearts loss)
- Ascendant Shards — The Shatter Shard's dark twin: a consumable that raises your difficulty level by 25 on use (configurable via the
ascensionsection), clamped atgeneral.maxLevel. It's the survival path to Tier 5 mobs, champion spawns, and the richer XP/loot payoff without waiting out the passive climb. The raised level is the cost — consumption is costless by default, with an optional short Strength II / Resistance II buff (sideEffects, off by default). Crafted from a Nether Star ringed by four Shatter Shards, so opting into difficulty is a deliberate, expensive choice. When already at the maximum level, using one is a no-op and keeps the item. Note the interplay with Death Relief (on by default): each death bleeds 2 levels back off the boost — a thematic risk/reward, not a bug.
The moon axis stops being a quiet stat curve and becomes something you plan around. At nightfall on a full moon, the Overworld rolls a configurable chance (chance, 25% by default) to turn the night into a Blood Moon that lasts until dawn:
- Amplified moon bonus — every mob spawned during the event has its moon-axis factor multiplied by
moonBonusMultiplier(3× by default). Global stat caps still apply, so the surge never pushes a mob past the configured ceilings. - Raised spawn caps — hostile (
MONSTER) spawn caps, both the global per-category cap and the per-player local cap, are multiplied byspawnCapMultiplier(2× by default) for a measurably denser night. Nether and End caps stay vanilla. - No sleeping through it — with
blockSleepon, beds refuse until dawn with an on-screen message, and anyone already asleep when the event begins is woken. The event always ends at daybreak and everything reverts. - You'll know it's coming — with
clientEffectson, the sky, fog, and moon tint blood red for the duration and an ominous warning sting plays at nightfall. - Restart resilient — event state is synced to clients (so it works on dedicated servers) and survives a server restart mid-night.
Each piece is individually toggleable under the bloodMoon config section, with enabled as the master switch. Admins can force or clear an event with /tribulation bloodmoon [start|stop].
Tribulation registers eight custom statistics (highest level reached, levels lost to death relief, levels lost to offline decay, Shatter Shards used, Ascendant Shards used, half-hearts lost, half-hearts restored, and Tier-5 scaled mobs killed). View them in-game from the vanilla Statistics screen under Custom.
A Tribulation advancement tab tracks progression milestones: the Tier 1–5 ladder, surviving death with a Soulbound item, using a Shatter Shard, using an Ascendant Shard, restoring a heart with a Heart Fragment, and killing a Tier-5 scaled mob. Crossing a tier fires an advancement toast plus a custom sound sting on the leveling player only. All criteria are server-side and work on dedicated servers.
- Champion mobs — above a level threshold, a small share of hostile spawns become named elites with 1–2 affixes (vampiric, explosive, knockback aura, thorns, regenerating), boosted stats, a particle aura, and improved XP/loot
- Special zombie variants (Big Zombie, Speed Zombie) with distinct stat profiles
- Special skeleton variants (Deadeye, Brute) with distinct bow cadence and stat profiles
- Boss scaling with separate, gentler formula (Ender Dragon, Wither, tagged bosses)
- Multiplayer level blend modes (
nearest/max/average) plus an optional capped group health bonus per extra nearby player — health only, so damage and XP stay fair - Trial spawner scaling from detected-player levels, with an optional ominous upgrade
- Bonus XP proportional to mob difficulty, tunable via
xpMultiplier(~5x on a fully-scaled mob by default) - Per-mob toggle switches for granular control
- Full compatibility with modded mobs via namespace exclusion and per-entity overrides
Requirements: Minecraft 1.21.1, Fabric Loader 0.16.10+, Fabric API, Java 21
Drop the jar into mods/ on both server and client. Config generates at config/tribulation.json on first launch — tune everything with /tribulation reload.
| Command | Perm | Description |
|---|---|---|
/tribulation info |
0 | Show your own level, tier, and progress to next level |
/tribulation hearts |
0 | Show your own heart penalty (Hardcore Hearts) |
/tribulation level <player> |
2 | View another player's level and time to next |
/tribulation set <player> <level> |
2 | Set a player's difficulty level (clamped to maxLevel) |
/tribulation reset <player> |
2 | Reset a player to level 0 |
/tribulation reload |
2 | Hot-reload the config file without restarting |
/tribulation config |
2 | Print a summary of the current configuration |
/tribulation debug <player> |
2 | Show detailed scaling breakdown for a player's position |
/tribulation inspect |
2 | Inspect the mob you're looking at (within 10 blocks) |
/tribulation hearts <player> |
2 | View another player's heart penalty |
/tribulation hearts <player> restore <n> |
2 | Restore lost half-hearts for a player |
/tribulation hearts <player> reset |
2 | Clear all heart penalties for a player |
/tribulation inventory <player> |
2 | Count soulbound items in a player's inventory |
/tribulation bloodmoon |
2 | Show whether a Blood Moon is currently active |
/tribulation bloodmoon start |
2 | Force-start a Blood Moon in the current world |
/tribulation bloodmoon stop |
2 | End the active Blood Moon |
| Control | Default | Description |
|---|---|---|
| Peek Tier Detail | Left Alt | Hold to overlay a detail panel showing your level, tier, progress to the next level, and the abilities that nearby scaled mobs have at your tier. Release to dismiss. |
Rebind it under Options → Controls → Key Binds, in the Tribulation category. It is bound to Left Alt by default — unused by vanilla and ergonomic to hold. The panel behaves like vanilla's hold-Tab player list (never capturing the mouse or pausing the game), so it is deliberately not bound to Tab, which that list already holds. It hides automatically during F1, open screens, and spectator mode.
Every value is tunable without restart. Key sections: general, timeScaling, distanceScaling, heightScaling, moonPhaseScaling, dimensionOffsets, biomeOffsets, structureBoosts, groupHealthBonus, statCaps, totems, deathRelief, levelDecay, shards, ascension, hardcoreHearts, soulInventory, bloodMoon, scaling (per-mob), unlistedHostileMobs, specialZombies, specialSkeletons, bosses, xp, champions, tiers, mobToggles, abilities, armorEquipment, weaponEquipment, trialSpawner, raidScaling, packTactics, environmentalPressure, threatParticles, and the client HUD fields enableTierHud/hudAnchor/hudOffsetX/hudOffsetY.
./gradlew build # produces build/libs/tribulation-<version>.jar
./gradlew test # runs unit tests
./gradlew runGametest # runs Fabric gametest suiteThe pushed v* tag is the source of truth — the release workflow derives the
version from it. Just tag and push:
make release VERSION=1.2.3 # tags v1.2.3 and pushes it (triggers CI release)
make release VERSION=1.2.3 NO_PUSH=1 # create the tag locally onlyIf you previously used a mob scaling mod, remove it before installing Tribulation. This mod provides a unified system with formula-driven scaling, per-player progression, and opt-in death penalty mechanics in a single jar with zero external dependencies.
Tribulation provides a stable, read-only API and a level-change event for other mods to integrate with. You can use it as a soft dependency by compiling against it with modCompileOnly and guarding calls with FabricLoader.isModLoaded("tribulation").
dependencies {
modCompileOnly "maven.modrinth:tribulation:<version>"
}Reading Player Level:
if (FabricLoader.getInstance().isModLoaded("tribulation")) {
int level = com.rfizzle.tribulation.api.TribulationAPI.getLevel(serverPlayer);
int tier = com.rfizzle.tribulation.api.TribulationAPI.getTier(serverPlayer);
}Listening for Level Changes:
if (FabricLoader.getInstance().isModLoaded("tribulation")) {
com.rfizzle.tribulation.api.TribulationLevelCallback.EVENT.register((player, oldLevel, newLevel) -> {
player.sendMessage(Text.of("Your level changed from " + oldLevel + " to " + newLevel + "!"), false);
});
}Safe Client-Side Access:
// Safe to call on client; returns -1 if unknown or mod not present
int clientLevel = com.rfizzle.tribulation.api.TribulationAPI.getClientLevel();Checking Mob Scaling State:
if (FabricLoader.getInstance().isModLoaded("tribulation")) {
// Returns the tier (0-5) the mob was scaled to at spawn
OptionalInt tier = com.rfizzle.tribulation.api.TribulationAPI.getScaledTier(mob);
boolean wasScaled = com.rfizzle.tribulation.api.TribulationAPI.wasScaledByTribulation(mob);
}Overriding Armor Drop Chance:
if (FabricLoader.getInstance().isModLoaded("tribulation")) {
// Hook armor drops for integration with loot mods
com.rfizzle.tribulation.api.TribulationAPI.setArmorDropChanceProvider((mob, tier, slot, stack, defaultChance) -> {
return 2.0f; // Force 100% drop chance (Mob.PRESERVE_ITEM_DROP_CHANCE)
});
}Part of Concord — a modular collection of system overhauls. Install any, combine all.
- Meridian — Chart your enchantments.
- Mercantile — Every villager remembers.
- Prosperity — Every chest, yours to discover.
Licensed under the MIT License. © 2025-2026 rfizzle. Tribulation is not affiliated with Mojang Studios or Microsoft.
