Tags
Creators
Details
Licensed MIT
Published 3 years ago
Updated last week
All versions
2.8.0+1.21.1-neoforge
Release
2.8.0+1.21.1-neoforgelast week 5,028
Compatibility
Minecraft: Java Edition
1.21.1
Platform
NeoForge
Supported environments
Client and server
Changes
2.8.0 - 1.21.1
For players
⚠️ BREAKING
- ⚠️ Mod id and namespace renamed
more_rpg_classes->mrpg_lib(registry ids, spells, tags, loot functions and entries such asmrpg_lib:conditional_item, custom impact handlers such asmrpg_lib:knock_up_fixed) - Package renamed
net.more_rpg_classes->com.mrpg_lib, maven groupcom.mrpg_lib, archive base namemrpg-lib - Everything that touches Spell Engine, Spell Power, playerAnimator, Ranged Weapon API or Critical Strike moved into
com.mrpg_lib.compat.<name> MoreParticlessplit: the Spell Engine dependent particles moved tocompat.spell_engine.particle.MoreSpellParticles;client.particle.MoreParticlesCustomMethodssplit:spellSchoolDamageCalculationandisEntityProtectedCheckmoved toSpellEngineMethods;isEntityProtectedCheckis deprecated, useAllyHelper.canHelp,getHighestSpellSchoolPowertoSpellPowerMethodsStealthStatusEffect.stealthPopParticles()is no longer abstract, it returnsObject(defaultnull) so the class no longer references Spell Engine typesMobSpellCastGoalruns in real time now: it ticks every game tick and tracks cooldowns against world time, soupdateCooldown()is a no-op and no longer needs to be called
Changed
- Spell Engine and Spell Power are no longer required. Both are optional now.
- The mod id is now
mrpg_libit wasmore_rpg_classes. - The config folder moved from
config/more_rpg_classestoconfig/mrpg_lib. - Frozen Solid, Soaked and Arcane Precision use standalone versions of the effects when Spell Power is not installed.
- Spells with a cast time now go off at the end of the cast, like for players, so the whole cast animation plays.
- Mob spells now respect the spell's delivery delay.
- Mobs mow charge spells like players. If charging adds range, they charge just enough to reach the target and use the spell from its full charged range.
- Otherwise, they charge fully, or release at the minimum charge when the target is very close.
- Buffed Burstcrack's Damage Power Coefficient
Added
mrpg_lib:custom_cloudentity, a generic lingering cloud, added mainly for Loot & Explore- Mobs can play player animations (needs playerAnimator). This includes villagers, wandering traders, witches and illagers.
- Better Combat (optional): mobs that use the new melee goal attack with their weapon's combos, animations, hitboxes and weapon trails, with the same animation timing, slowdown while swinging and knockback rules as players.
- They can dual wield too: alternating hands, mirrored off-hand swings and Better Combat's dual-wield attack speed and damage multipliers.
- Weapons with a holding pose (like claymores, spears and glaives) are held in that pose whenever the mob carries them, with the same walking and two-handed rules as for players
- Combat Roll (optional): mobs that use the new roll goal can roll away when hurt, roll towards their target and dodge projectiles
- Spell casting mobs can cast arrow spells and stash spells
- Spell casting mobs can also use summon spells correctly now
- Spell casting mobs can now use melee weapon skills like Swift Strikes: they walk up to the target, dash forward when the skill has momentum, and hit everything in the swing's arc
- Spell casting mobs can cast spells with a custom delivery from other mods
- Upgrade crystals (T5 Class Armor Upgrade Crystals) are now affiliated loot: they drop more often for players carrying a spell book of a class they apply to
- Breaking:
ISpellCasterEntity.isCastingSpell()is nowisMobCasting(). The old name collides with vanilla's ownisCastingSpellon spellcasting illagers, which broke the interface on NeoForge dev environments MobSpellCastGoal:SpellTimingswithwithTimings(...)(goal-wide or per spell; cast/channel seconds, cooldown seconds, channel ticks) andwithAnimations(true)to play the spell's cast and release animationsMobSpellCastGoalcasts arrow spells (SHOOT_ARROW,AFFECT_ARROW) with real arrows, and stash spells (STASH_EFFECT, e.g. Power Shot) like on players.MobSpellCastGoalrunsCUSTOMdeliveries through Spell Engine, so handlers registered withSpellHandlers.registerCustomDeliverywork for mobs (they get the mob ascaster).SpellBehaviorRegistry.targetDistance(min, max): ready-made condition to only cast a spell when the target is within a distance range- Spell Engine summons of a mobSpellCaster treat it as their owner, so they follow and defend it and attack its target
- playerAnimator mob bridge (
compat.player_animator.api.MobAnimations,MobAnimationOptions,MobAnimationLayerwithPOSE,OFF_HAND_POSE,MISC,ATTACK,CASTING,RELEASE,DODGE, clientMobModelAdapters, built-inVillagerModelAdapter) - Goals:
LongReachMeleeAttackGoal,WindupMeleeAttackGoal,PredicateGatedGoal BetterCombatCompat.createMeleeGoal(...)(Better Combat combo melee for mobs, a plainMeleeAttackGoalwithout the mod) withMeleeSettings(baseRange,intervalScale,animations,resetInvulnerability,weaponTrails), andBetterCombatCompat.onGoalRemoved(goal)to drop the weapon pose of a goal you removeMobAnimations.playWeaponPose(mob, layer, poseId, twoHanded): plays the Better Combat weapon pose onPOSEorOFF_HAND_POSEMobGoals(add goals to mobs you don't own, e.g. villagers) andSpellCasterState(cast timer to back anISpellCasterEntitymixin)- Dev-environment commands
/mrpg_goal <targets> bettercombat|combatroll [dodge]|spellcast <spell>|shoot [count]|clearto test the custom goals on any mob. AllyHelper(canHurt,canHelp,isAlly): one ally check for projectiles, clouds, traps and AoE. Resolves owners (projectiles, pets, controlled mobs), checks teams and mob-vs-mob- Asks Spell Engine's entity relations first when it is installed (
setRelationBridge) EntityAttributeConfig/EntityAttributeApplier: a reusable,ConfigManager-backed way to give a registered entity configurable attributes- base values are for the easy difficulty and there separate normal/hard difficulty multipliers
- Config entries can also carry a
custommap of numbers (with the same difficulty multipliers) and string values (with optionalnormal_stringandhard_stringper difficulty), for mob tuning like cooldowns, projectile counts, ranges or summoned entity ids. Set defaults withEntry.setCustom(...)/setCustomString(...), read them live withEntityAttributeApplier.custom(entity, config, fallback)(getInt,getDouble,getBoolean,getString) - Config entries can also carry an
equipmentmap (mainhand,offhand,head,chest,legs,feet) to equip mobs on spawn: an item id or a#tag(random item from the tag), with optional spawnchance,enchant_chance/enchant_levels/enchant_tag,drop_chance, andrequired_modswith afallback_itemfor items from optional mods. Set defaults withEntry.setEquipment(...)andEquipmentValue MobSpellCastGoal.withEquipmentSpells(true)reads the caster's mainhand item for passive and modifier spellswithPassiveSpellTag(tag)grants passive spells for the SpellCasting Entity from a spell tag instead
Fixed
- Soaked now also makes targets vulnerable to lightning spells (with Spell Power), not only frost
- Wither's Curse now only counts harmful status effects on the target
- Mob-cast spells with an area impact now hit everything around the target and show their impact particles and sound.
- Mobs no longer use melee-range spells from far away
- Mob-cast area spells with melee range now hit everything around the mob.
Optional dependencies
Any compatible version
Any compatible version
Any compatible version
Any compatible version
Any compatible version
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:Wkc3lwHo:oA6DragU"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Wkc3lwHo:oA6DragU"
}

