![[AN]Adaptive Nemesis](https://cdn.modrinth.com/data/anacxDIl/f63c99aa9be78e31253e68c2c8368f95ea97d58e.gif)
[AN]Adaptive Nemesis
The dynamic difficulty balancing module specifically designed for integration packs aims to address the issue of difficulty imbalance in current mainstream integration packs, where the early game is too easy and the late game is too challenging.
Tags
Creators
Details
1.0.12
Compatibility
Changes
๐ [Adaptive Nemesis] v1.0.12 ๐
THE WORLD SPEAKS YOUR LANGUAGE NOW.
And it has a lot more to say.
โจ NEW SYSTEMS & ENHANCEMENTS
๐ FULL INTERNATIONALIZATION (I18N) REFACTOR
| Before | After | What Changed |
|---|---|---|
Component.literal("ไบก็ตๅๅขๆญฃๅจ้ผ่ฟ...") |
Component.translatable("adaptive_nemesis.invasion.approaching") |
Every user-facing string is now a translation key |
| Hardcoded Chinese | Language files | en_us.json + zh_cn.json โ add your own! |
MELEE("่ฟๆ") |
MELEE("adaptive_nemesis.combat_style.melee") |
Combat styles, warnings, broadcasts โ all localized |
New Translation Keys (10+ added):
| Key | English | ไธญๆ | When You See It |
|---|---|---|---|
invasion.approaching |
Undead legion approaching... | ไบก็ตๅๅขๆญฃๅจ้ผ่ฟ... | The storm begins |
invasion.wave_cleared |
Wave %s cleared! | ็ฌฌ %s ๆณขๅทฒๆธ ้ค๏ผ | You survived a wave |
invasion.defeated |
Undead legion defeated! | ไบก็ตๅๅขๅทฒ่ขซๅป่ดฅ๏ผ | Victory |
nemesis.appearance_warning |
โ Nemesis appeared! | โ ๅฎฟๆๅบ็ฐ๏ผ | Something bad just got worse |
combat_style.melee |
Melee | ่ฟๆ | Nemesis archetype display |
๐ "I switched my client to English. The invasion warned me in English. The Nemesis cursed me in English. It felt personal."
๐น NEMESIS SYSTEM โ CRASH-PROOF & SMARTER
The Problem: Some modded mobs don't have attack damage. Nemesis tried to buff it. Game crashed. Everyone sad.
The Solution: Check first. Buff second. Live to fight another day.
| Feature | What It Does | Default |
|---|---|---|
NEMESIS_REQUIRE_ATTACK_DAMAGE |
Only convert mobs that can actually fight | โ
true |
| Null-Proof Attribute Checks | getAttribute() โ null check โ apply or skip |
Always on |
| Pacifist Protection | Passive mobs, decorative entities, weird modded things โ they stay normal | Always on |
What Gets Checked Now:
- โค๏ธ Max Health โ exists? buff it. missing? skip gracefully.
- โ๏ธ Attack Damage โ exists? buff it. missing? skip gracefully.
- ๐ก๏ธ Armor โ exists? buff it. missing? skip gracefully.
- โก Movement Speed โ exists? buff it. missing? skip gracefully.
๐ก๏ธ "My modded flamingo no longer crashes the game when it tries to become a Berserk Butcher. It just stays a flamingo. Thank you."
๐ฐ INVASION SYSTEM โ DATAPACK SUPERPOWERS
Before: JSON defined waves and rewards. That was it.
Now: JSON defines EVERYTHING. The mob. The effects. The name. The frost under their feet.
| New Field | Type | What It Does | Example |
|---|---|---|---|
effects |
List |
Potion effects on spawn | Fire Resistance, Speed, Invisibility |
glowing |
boolean |
Mob glows through walls | true โ you can't hide |
frostWalker |
boolean |
Leaves ice trails | true โ the ground freezes behind them |
customNameKey |
String |
Translation key for custom name | "adaptive_nemesis.invasion.custom_blaze" |
healthMultiplier |
double |
HP multiplier | 1.5 โ tankier |
damageMultiplier |
double |
ATK multiplier | 2.0 โ ouch |
equipmentLootTable |
ResourceLocation |
Custom gear from loot table | "minecraft:chests/nether_bridge" |
Frost Walker Implementation:
- Auto-equips
iron_bootswithfrost_walkerenchantment - Drop chance:
0.0Fโ you don't get free boots, sorry
โ๏ธ "The skeletons walked across the lake. The lake froze. I did not walk across the lake."
๐ KUBEJS API โ MORE EVENTS, MORE CONTROL
New Events Added:
| Event | Fires When | What You Can Do |
|---|---|---|
adaptive_nemesis.world_stage_change |
World stage advances | Modify stageMultiplier, react to progression |
adaptive_nemesis.invasion.start |
Invasion begins | Modify totalWaves, difficultyMultiplier, or cancel it |
adaptive_nemesis.invasion.wave_start |
Each wave starts | React to wave number, scale dynamically |
adaptive_nemesis.invasion.end |
Invasion concludes | Inspect victory, rewards, wavesCompleted |
KubeJS Script Examples:
// Double the waves when world reaches stage 3
onEvent('adaptive_nemesis.invasion.start', event => {
if (WorldStageManager.getStage() >= 3) {
event.totalWaves *= 2;
event.difficultyMultiplier *= 1.5;
}
});
// Bonus rewards on victory
onEvent('adaptive_nemesis.invasion.end', event => {
if (event.victory && event.wavesCompleted >= 6) {
event.player.give('minecraft:diamond', 5);
}
});
๐ง QUALITY OF LIFE
| Change | Why It Matters |
|---|---|
| ๐งน Cleaned Language Files | Removed empty lines, optimized JSON format |
| ๐ก๏ธ Null-Safe Everything | Nemesis system now gracefully handles weird modded entities |
๐ PATCH NOTES AT A GLANCE
+ ๐ FULL I18N REFACTOR (All strings โ translation keys)
+ ๐ en_us.json + zh_cn.json (Add your own language!)
+ ๐น NEMESIS_REQUIRE_ATTACK_DAMAGE config (Skip pacifist mobs)
+ ๐ก๏ธ Null-safe attribute checks (No more crashes on weird entities)
+ ๐ฐ Datapack: effects, glowing, frostWalker, customNameKey
+ ๐ฐ Datapack: healthMultiplier, damageMultiplier, equipmentLootTable
+ ๐ KubeJS: World Stage Change event
+ ๐ KubeJS: Invasion Start / Wave Start / End events
+ ๐ KubeJS: InvasionStartResult (modify waves & difficulty)
- ๐๏ธ Hardcoded Chinese text (RIP, you served well)
- ๐ Nemesis crash on attribute-less mobs
- ๐ Frost walker boots dropping from invasion mobs
! โ ๏ธ NEMESIS_REQUIRE_ATTACK_DAMAGE defaults to true
! (May skip some mobs that previously became Nemesis)
! โ ๏ธ Custom datapack invasions need updated JSON schema
๐ฏ CONFIGURABLE. ALWAYS.
๐ก Heads up: Don't like the attack damage check? Flip
NEMESIS_REQUIRE_ATTACK_DAMAGEtofalse. Want your flamingo to become a god? Your call.Want to write a datapack invasion where every mob is glowing, frost-walking, and named "Dave"? The JSON supports it. We won't judge.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:anacxDIl:rBuZpKcX"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:anacxDIl:rBuZpKcX"
}
