Mob Dice Attributes 2.0.0
release26 апреля 2026 г.Changelog for Mob Dice Attributes 1.21.1
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[2.0.0] - 2026-04-25
➕ Added
-
Improved Dice Algorithm:
- Die count (
x) is now computed from the mob's vanilla attribute value andrangeFactor, then the bonus (b) absorbs the rounding error so the rolled average is always exactly equal to the vanilla value — no more systematic buff/nerf from rounding drift - Formula:
xdn + bwhereb = target − x · dieAvg
- Die count (
-
Auto Dice Type Selection:
- New
autoDiceconfig option (defaulttrue) per attribute section — picks the most "natural-feeling" die for each mob automatically based on its vanilla attribute value - Health curve: d4 (≤6 HP) → d6 (≤15) → d8 (≤30) → d10 (≤60) → d12 (≤120) → d20
- Speed curve: d4 (≤0.15) → d6 (≤0.25) → d8 (≤0.35) → d10
- Damage curve: d4 (≤2) → d6 (≤5) → d8 (≤10) → d10 (≤20) → d12
- Knockback curve: d4 (≤0.5) → d6 (≤1.0) → d8 (≤2.0) → d10
- Set
autoDice = falseto revert to the globaldiceTypefallback
- New
-
Per-mob Datapack Overrides:
- Override dice / rangeFactor / bonus per mob ID or entity tag via datapack JSON files under
data/<namespace>/mob_overrides/ - Partial overrides supported — omit any field to fall through to the auto-pick or global config value
- Tag support via
#prefix (e.g.#minecraft:raiders) - Reloads on
/reloadwith no restart required - Example file shipped in jar:
data/mobdiceattribs/mob_overrides/example.json - Resolution order: datapack override → auto-pick → config diceType fallback
- Override dice / rangeFactor / bonus per mob ID or entity tag via datapack JSON files under
-
Dimension Filter:
- Rolling can be disabled or scaled per dimension via datapack JSON files under
data/<namespace>/dimension_rules/ enablefield (optional, defaulttrue) — set tofalseto suppress all rolling in that dimensionmultiplierfield (optional, default1.0) — scales every attribute target before dice are rolled- Example file shipped in jar:
data/mobdiceattribs/dimension_rules/example.json - Reloads on
/reload
- Rolling can be disabled or scaled per dimension via datapack JSON files under
-
Difficulty Scaling:
- Rolling can be disabled or scaled per world difficulty via datapack JSON files under
data/<namespace>/difficulty_rules/ - Targets:
"peaceful","easy","normal","hard"(lowercase) - Multipliers stack multiplicatively with any active dimension rule multiplier
- Example file shipped in jar:
data/mobdiceattribs/difficulty_rules/example.json - Reloads on
/reload
- Rolling can be disabled or scaled per world difficulty via datapack JSON files under
-
Distance-from-Spawn Health Scaling:
- Scales mob max health based on horizontal distance from world spawn (health only)
- Controlled via
[distanceScaling]config section — disabled by default - Config fields:
enable(defaultfalse),blocksPerTier(default1000),multiplierPerTier(default0.1),cap(default3.0) - Detailed conflict warning in config comments: enabling alongside mods like Scaling Health or Gradual Difficulty causes double-scaling
-
Additional Attributes:
- Four new attributes now support dice rolling, each with its own full config section and datapack override support:
armor— only rolls for mobs with base armor > 0 (zombie=2, warden=30)armorToughness— only rolls for mobs with base armor toughness > 0 (warden=3)attackSpeed— only rolls if base > 0; note: limited visible effect on most hostile mobsfollowRange— detection/pursuit range (zombie=35, skeleton=16, blaze=48)
- Example file
mob_overrides/example_all_attributes.jsonshipped in jar showing all eight attributes
- Four new attributes now support dice rolling, each with its own full config section and datapack override support:
-
Elite Mobs:
- Mobs that roll above a configurable HP ratio threshold are tagged as "elite"
- Elite mobs display a custom name tag (e.g.
Elite Zombie) that is always visible - Config section:
[eliteMobs]—enable,healthThreshold(default1.2),namePrefix(default"Elite"),showName(defaulttrue) - Threshold note: with
rangeFactor=2.0the practical rolled maximum is ~1.35×; values above that will never fire. Recommended range: 1.15–1.35 - Profile
namePrefix(see Spawn Profiles) takes priority over the elite name when set
-
Loot Scaling:
- Mobs that roll above-average health drop bonus loot rolls and/or extra XP on death
mda_hp_ratiostored in entity NBT for any mob that rolls above its vanilla HP target- Config section:
[lootScaling]—enable,threshold(default1.0),xpMultiplier(default2.0),lootBonusRolls(default1) - Set
thresholdequal toeliteMobs.healthThresholdto restrict bonuses to elite mobs only - Spawn profile
xpMultiplier/lootBonusRollsfields (see Spawn Profiles) override config for that mob
-
Spawn Profiles:
- Reusable named attribute bundles stored in
data/<namespace>/spawn_profiles/ - Fields:
namePrefix,nameColor,xpMultiplier,lootBonusRolls, and all eightAttribOverridesections (all optional) - Profile overrides merge on top of mob-specific overrides; profile name/loot fields replace the corresponding elite/lootScaling config for that mob
- Four default profiles shipped in jar:
common,uncommon,rare(blue, 2× XP, 1 bonus roll),legendary(purple, 5× XP, 3 bonus rolls, all attributes boosted) - Example reference profile:
data/mobdiceattribs/spawn_profiles/example_legendary.json - Reloads on
/reload
- Reusable named attribute bundles stored in
-
Rarity Tiers:
- On every mob spawn, a weighted random roll selects a spawn profile from a global tier pool
- Tier pool defined via
data/<namespace>/rarity_tiers/—{ "tiers": [ { "profile": "...", "weight": N }, ... ] } - Weights are proportional (do not need to sum to 100)
- Config section:
[rarityTiers]—enabletoggle only - Example pool shipped in jar:
data/mobdiceattribs/rarity_tiers/example.json(60/25/10/5 weights for common/uncommon/rare/legendary) - Reloads on
/reload
-
Spawn Hooks:
- Map specific spawn contexts (natural, spawner, raid event, command, etc.) to a fixed spawn profile, bypassing rarity tier selection for that context
- Defined via
data/<namespace>/spawn_hooks/— JSON object with context name keys and profileResourceLocationvalues; omit a key or set tonullto fall through to rarity tiers - Valid contexts:
natural,spawner,chunk_generation,structure,breeding,mob_summoned,jockey,event,conversion,reinforcement,triggered,bucket,spawn_egg,command,patrol - Spawn hook profile beats rarity tier when both apply
- Config section:
[spawnHooks]—enabletoggle only - Example file shipped in jar:
data/mobdiceattribs/spawn_hooks/example.json - Reloads on
/reload
-
Commands:
/mda reroll <targets>— force-rerolls matched entities; resets HP to stored vanilla value (mda_base_hp) before rolling so results don't compound. Requires op level 2. Accepts standard entity selectors./mda inspect <target>— prints current attribute values plusmda_hp_ratio,mda_base_hp, and assigned profile. Single-entity selector only.
-
Jade Mod Integration:
jadeadded as a runtime dependency (implementation) inbuild.gradle
⚙️ Changed
- All eight
roll*()methods now accept aSpawnProfileparameter; attribute overrides merge asprofile.attrib().merge(mobOverride)so per-mob overrides beat profile applyRolls()gate order: mob whitelist/blacklist → dimension gate → difficulty gate → profile resolution → per-attribute rolls- Distance multiplier (health only) stacks on top of the combined dimension × difficulty multiplier
- All
SimpleJsonResourceReloadListenerimplementations now filter byMDA.MOD_IDnamespace — onlydata/mobdiceattribs/files are loaded, preventing collisions with other mods - All eight attributes now store vanilla base values in NBT on first roll and reset to them on reroll — prevents compounding across multiple rerolls
showNameconfig (defaultfalse) now gates name tag visibility for both profile names and elite names; names are still set on the mob for Jade/TOP hover[speed] enabledefaults totruewith standard dice mechanics; speed profile overrides removed from legendary/rare after confirming compounding was the root cause/mda inspectnow outputsProfileandSpawn typeNBT fields for debuggingrarity_tiers/example.jsonrenamed torarity_tiers/default.jsonFinalizeSpawnEventupdated to top-level class (NeoForge 1.21.1 API change)
[1.0.0] - 2026-04-23
⚙️ Changed
- Platform port: Forge 1.20.1 → NeoForge 1.21.1
- Build system migrated to
net.neoforged.moddev(Gradle plugin) @Modclass now uses constructor injection ofIEventBusandModContainerMod.EventBusSubscriberreplaced with@EventBusSubscriber(bus = Bus.GAME)ForgeConfigSpecreplaced withModConfigSpecthroughoutResourceLocation.fromNamespaceAndPath()API adopted- Attributes API updated:
Attributes.XreturnsHolder<Attribute>;.value()used to reachRangedAttribute - GottschCore package updated:
mod.gottsch.forge.gottschcore.*→mod.gottsch.neo.gottschcore.* - GottschCore artifact updated:
gottschcore→gottschcore-neoforge neoforge.mods.tomlmoved tosrc/main/templates/META-INF/withgenerateModMetadatatask for property substitution- Mod config registered directly via
modContainer.registerConfig()— removed prematureModConfigEventvalidation listener that caused "Cannot get config value before config is loaded" crash isValidEntity()simplified toentity instanceof Monster(Enemy interface removed in 1.21)- Gradle wrapper pinned to 8.12.1 for compatibility with moddev 2.0.78
- All dependencies declared
side = "SERVER"— mod is server-only and clients can connect without it installed
- Build system migrated to
Mob Dice Attributes 1.0.0
release26 апреля 2026 г.Changelog for Mob Dice Attributes 1.21.1
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - 2026-04-23
⚙️ Changed
- Platform port: Forge 1.20.1 → NeoForge 1.21.1
- Build system migrated to
net.neoforged.moddev(Gradle plugin) @Modclass now uses constructor injection ofIEventBusandModContainerMod.EventBusSubscriberreplaced with@EventBusSubscriber(bus = Bus.GAME)ForgeConfigSpecreplaced withModConfigSpecthroughoutResourceLocation.fromNamespaceAndPath()API adopted- Attributes API updated:
Attributes.XreturnsHolder<Attribute>;.value()used to reachRangedAttribute - GottschCore package updated:
mod.gottsch.forge.gottschcore.*→mod.gottsch.neo.gottschcore.* - GottschCore artifact updated:
gottschcore→gottschcore-neoforge neoforge.mods.tomlmoved tosrc/main/templates/META-INF/withgenerateModMetadatatask for property substitution- Mod config registered directly via
modContainer.registerConfig()— removed prematureModConfigEventvalidation listener that caused "Cannot get config value before config is loaded" crash isValidEntity()simplified toentity instanceof Monster(Enemy interface removed in 1.21)- Gradle wrapper pinned to 8.12.1 for compatibility with moddev 2.0.78
- All dependencies declared
side = "SERVER"— mod is server-only and clients can connect without it installed
- Build system migrated to
Mob Dice Attributes 1.0.0
release23 апреля 2026 г.Нет описания изменений
Mob Dice Attributes 1.0.1
release15 февраля 2023 г.Uses the correct fml loader version (43).
Mob Dice Attributes 1.0.1
release15 февраля 2023 г.Uses the correct update url.
Совместимость
Создатели
Детали
Лицензия:LGPL-3.0-or-later
Опубликован:3 года назад
Обновлён:1 неделю назад
