Tags
Creators
Details
2.0.0
Compatibility
Required content
Changes
Supported platforms: Minecraft 1.20.1 (Fabric, Forge) · Minecraft 1.21.1 (Fabric, NeoForge)
New features
- Unified leveling architecture — mob levels are calculated once on spawn through
LevelCalculationService, with attribute scaling, classification, and storage handled by dedicated services. - RPG Attribute System integration — optional player-based scaling (
nearest,highest_nearby,average_nearby) and combat rebalance whenrpg_attribute_system4.1+ is installed. - Public API (
RmlApi) — other mods can read mob levels, force recalculation, and inspect level breakdowns. - Debug commands —
/rml inspect,/rml recalculate,/rml config,/rml distance(op level 2). - Percentage attribute scaling — per-rule
additiveorpercentmodes inattributes_settings.json. - Gson JSON config — all settings live under
config/rpgmoblevelingsystem/(replaces Jauml on 1.20.1). - Namespace bans — exclude entire mods (e.g.
cobblemon) viabanned_namespaces. - Hostile-only scaling — optional global or per-rule hostile filter.
- Structure & boss level locks —
structureMinLevelsandbossLevelLocksin config. - Custom loot by level — optional
loot_by_level.jsonfor level-band drops. - Configurable name format —
%mob_name% [Lv. %level%]inglobal_settings.json. - Ascendant elites — ported to common code on all loaders (buffs, boss bar, death loot).
- Documentation — usage guide, API reference, and community feedback resolution report in
docs/.
Bug fixes
- Distance scaling — now uses Euclidean block distance divided by
scaleDistance(was incorrectly using squared distance). - Day scaling — uses total elapsed world time (
gameTime / 24000) instead of wrap-sensitive day time alone. - Movement speed corruption — attributes applied via idempotent named modifiers instead of mutating base values; speed skipped for non-hostiles by default.
- Locked mob HP — locked/boss mobs no longer keep incorrect stacked HP forever.
- Zero XP in modded dimensions — XP scaling works on Fabric (mixin) and NeoForge/Forge (event).
- Ender Dragon / boss scaling — dedicated boss lock defaults and locked-level path.
- Overlay console spam — removed periodic debug logging; optional
overlayDebugflag. - Jade / name display — overlay no longer overwrites mob custom names with
Lv.N. - Performance — levels applied once on spawn, never every tick; early exit for banned namespaces.
- Low-level mobs vs high RAS players — optional
playerBalanceEnabledscales mob power relative to nearby player combat snapshot.
Config changes
New / updated files in config/rpgmoblevelingsystem/:
| File | What's new |
|---|---|
scale_settings.json |
rounding_mode, playerScaleMode, playerScaleRadius, playerScaleFactor, balance ratios |
attributes_settings.json |
mode (additive / percent), hostileOnly per rule |
mobs_list_settings.json |
banned_namespaces, hostileOnly, bossLevelLocks, structureMinLevels |
global_settings.json |
nameFormat, jadeEnabled, overlayDebug |
loot_by_level.json |
Level-band custom drops (disabled by default) |
Legacy configs with scaleDistance >= 100000 and near-zero progression auto-migrate on first launch.
Breaking changes
- Config format — JSON only in 2.0; Jauml string configs on 1.20.1 are no longer read.
- Attribute application — uses Minecraft attribute modifiers instead of permanent
setBaseValuemutations. Existing worlds keep stored level tags; use/rml recalculateto refresh mobs if needed.
For mod developers
import tn.nightbeam.rpgmoblevelingsystem.api.RmlApi;
int level = RmlApi.getLevel(entity);
RmlApi.recalculate(entity);
LevelDebugBreakdown breakdown = RmlApi.getDebugBreakdown(entity);
See docs/API.md for full reference.
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:4eSfhd3M:FkapP5yR"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:4eSfhd3M:FkapP5yR"
}

