Description
D&D Stats Core
Adds six tabletop ability scores to players and mobs, then resolves combat with d20 attack rolls, crits, stuns, and on-screen dice checks.
Requires Minecraft 1.21.1 and NeoForge.
What it does
On first join you assign STR, DEX, CON, INT, WIS, CHA (27-point buy from a base of 8, plus a +2 / +1). Scores lock for that world. Mobs have their own sheets.
Attacks, checks, and saves are rolled on the server. The client only draws what happened: floating numbers, a gold die on a passed check, and a roll log in the top-left.
Combat
- Every swing and shot rolls a d20 vs armor class. Nat 20 crits. Nat 1 always misses.
- Damage is
1dN + modifier. Crits roll the weapon die twice. - Axes, tridents, and maces can stun (STR vs CON) on a fully charged hit.
- Light / medium / heavy armor with real AC. Light keeps full DEX, medium caps it at +2, heavy ignores DEX. Below an item's STR requirement you keep the AC but attack at disadvantage and move slower.
- Shields add +2 AC. A raised shield only holds if the attack failed to beat that AC.
- Enchantments and potions use their own dice (Sharpness, Smite, Power, Fire Aspect, harming, healing, poison, wither, burning).
By default, failing the attack roll vs AC still deals damage (Minecraft-feel). Turn on failedAttackRollsMiss if you want a miss to cancel the whole hit.
Checks you can see
A passed check plays a dice sound, floats a gold die over that creature, and adds a line to the corner log — Charisma talk-downs, fire DEX saves, poison/wither CON saves, fall checks, brew checks, and the rest. Failures stay quiet.
Ability perks
| Stat | What it does |
|---|---|
| STR | Melee / trident to-hit and damage, stun, mining speed, knockback, armor STR gate |
| DEX | Bows and crossbows, AC, move speed, fall cushion + a check to take no fall damage, DEX save to put out fire |
| CON | Extra hearts, slower hunger, stun resist, CON saves vs poison and wither |
| INT | Extra XP, stronger enchanting table, chance to go one level past vanilla max, chance to brew one glowstone step higher |
| WIS | Faster nearby crops, shorter breeding + chance of twins, anvil overcap, extra 1d4 on instant potions |
| CHA | Cheaper villagers, a private extra deal at 14+, sneak-talk angry mobs down, illagers may ignore you |
HUD
Floating combat numbers, crit / stun / miss / block icons, corner roll log, mob health bars with portraits, inspect panel (I), and a character sheet keybind.
How to configure
Configs appear after the first launch:
- Server / world rules:
config/dnd_stats_core-common.toml - Your HUD:
config/dnd_stats_core-client.toml
Edit, save, then restart the client (or the server, for the common file).
HUD (dnd_stats_core-client.toml)
| Key | Default | Effect |
|---|---|---|
showRollLog |
true | Top-left dice / damage log |
showMobInspect |
true | Right-hand panel for the mob you look at (I toggles this) |
showCombatPopups |
true | Floating hit / miss / potion / save numbers |
showMobHealthBars |
true | Thin bars and portraits over mobs |
showAttackTooltips |
true | Weapon die and potion/enchant riders on item tooltips |
Progression ([progression])
| Key | Default | Effect |
|---|---|---|
enabled |
true | If false, every check uses +0. Combat still rolls. |
Combat ([combat])
| Key | Default | Effect |
|---|---|---|
baseAc |
10 | Unarmored AC before DEX (10 + DEX) |
critThreshold |
20 | Lowest natural d20 that crits (set 19 for Champion-style) |
failedAttackRollsMiss |
false | If true, failing vs AC cancels damage and on-hit effects |
Armor ([combat.armor])
| Key | Default | Effect |
|---|---|---|
enabled |
true | Catalog AC + weight classes |
strengthRequirements |
true | Too little STR → disadvantage and a speed penalty |
encumberedSpeedPenalty |
0.15 | Movement penalty while encumbered |
shieldAc |
2 | AC while holding a shield |
shieldBlockRoll |
true | Block only holds if the attack missed your AC |
Unarmed ([combat.unarmed])
Fists stay weak so punching cannot outpace a weapon.
| Key | Default | Effect |
|---|---|---|
capEnabled |
true | Cap empty-hand hits |
die |
1 | Unarmed die (1d1) |
maxDamage |
2.0 | Hard HP ceiling, even on a crit |
applyAbilityModifier |
false | If true, STR still adds (then the ceiling applies) |
PvE / PvP ([combat.pve] and [combat.pvp])
| Key | Default | Effect |
|---|---|---|
stunDc |
15 | Stun attempt DC |
critMultiplier |
1.25 | Extra damage on a crit |
stunDurationTicks |
20 | Stun length (20 ticks = 1 second) |
bossesImmuneToStun |
true | Wither, Ender Dragon, Warden, and #dnd_stats_core:stun_immune (PvE only) |
bossesImmuneToCrit |
false | Same bosses skip crit extra damage; a nat 20 still hits (PvE only) |
Abilities ([abilities])
Dexterity
| Key | Default | Effect |
|---|---|---|
fallCheck |
true | DEX check to negate leftover fall damage |
fallCheckBaseDc |
8 | DC for a fall that only just hurts; +1 DC per extra 2 blocks |
Charisma
| Key | Default | Effect |
|---|---|---|
pacifyEnabled |
true | Talk-down and illager non-aggression |
pacifyDc |
13 | Sneak, empty hand, use on an angry #dnd_stats_core:pacifiable mob |
illagerDc |
18 | Rolled when a #dnd_stats_core:negotiable mob targets you (needs CHA mod > 0) |
calmTicks |
1200 | How long they leave you alone (60 seconds) |
cooldownTicks |
200 | Wait after a failed attempt (10 seconds) |
stockEnabled |
true | Private extra villager deal |
stockMinScore |
14 | Lowest CHA that sees the deal |
stockMaxOffers |
1 | Pack hook; the screen still shows one deal |
Intelligence
| Key | Default | Effect |
|---|---|---|
brewUpgrade |
true | INT check when taking a potion from a brewing stand |
brewUpgradeDc |
14 | Pass → one glowstone step higher (harming → harming II) |
Wisdom
| Key | Default | Effect |
|---|---|---|
potionBoost |
true | Extra die on instant harming / healing |
potionBoostDc |
13 | WIS check when that potion lands |
potionBoostDie |
4 | Extra 1d4 (poison / wither ticks are not boosted) |
Datapacks (no code)
Drop files in a datapack (or override the ones in the jar). A file with the same path replaces the built-in default.
| What | Path |
|---|---|
| Mob scores | data/<namespace>/dnd_stats_core/mob_stats/<entity>.json |
| Armor | data/<namespace>/dnd_stats_core/armor/<item>.json |
| Enchant dice | data/<namespace>/dnd_stats_core/enchant_effects/<enchant>.json |
| Potion / fire dice | data/<namespace>/dnd_stats_core/effect_damage/<effect>.json |
| CHA trade pools | data/<namespace>/dnd_stats_core/charisma_trades/<profession>.json |
| Who you can talk down | data/dnd_stats_core/tags/entity_type/pacifiable.json |
| Who rolls CHA on aggro | data/dnd_stats_core/tags/entity_type/negotiable.json |
| Stun / crit immune | data/dnd_stats_core/tags/entity_type/stun_immune.json and crit_immune.json |
| Shields / stun weapons | data/dnd_stats_core/tags/item/shields.json, stun_weapons.json |
Example mob file (data/minecraft/dnd_stats_core/mob_stats/zombie.json):
{
"strength": 13,
"dexterity": 6,
"constitution": 16,
"intelligence": 3,
"wisdom": 6,
"charisma": 5
}






