Tags
Creators
Details
Licensed GPL-3.0-only
Published 4 years ago
Updated 2 days ago
All versions
1.9.10+1.21.1-neoforge
Release
1.9.10+1.21.12 weeks ago 966
Compatibility
Minecraft: Java Edition
1.21–1.21.1
Platform
NeoForge
Supported environments
Client and server
Required content
Changes
1.9.10
Functional changes:
- Targeted entities may only be highlighted if not invisible
- Fixed missing default translation for Spell Scroll item
- Fixed incorrect ordering of spell scrolls in creative menu
- Fixed inaccurate landing position of meteor storm spells
- Fixed spell cloud
impact_particlesnot executed - Fixed spell projectile
heldItemrender not respecting pitch - Fixed Impact Action with "apply_to_caster" true, cancels all the other impacts #139
- Fixed crash when you try to use a skill on a horse (without Better Combat) #190
API changes:
- BREAKING! -
CustomModelStatusEffect.Renderernow has different arguments - Added new generic status effect:
spell_engine:bleed - Added true volumetric collision detection for spell projectiles
- Added server-side entry point for entity spell casting (SpellHelper.java)
- Added some new assets: player animations, particles, sounds
- Added new external spell school
PHYSICAL_MELEE_DUAL, providing the combined power value of main hand and offhand melee attacks - Spell data structure changes:
- Added new root field
order, for sorting spells on the hotbar and spell binding GUI - Added new trigger field
weapon_condition— item pattern (id,#tagor~regex) the triggering attack's item must match: the firing weapon forARROW_SHOT/ARROW_IMPACT(spell-fired arrows never match), the striking hand's item forMELEE_IMPACT, otherwise the caster's main-hand item
- Added new root field
- Added Hybrid Power — per-impact blending of multiple spell schools (
impacts[].power_blend)- Each component merges the enabled aspects (
power,critical_chance,critical_damageflags) of another school's power into the impact's base school as a weighted average (base school weighs 1, componentweightdefaults to 1); any number of components allowed - Lets hybrid classes scale a spell with several attributes (e.g. Attack Damage + Healing Power) without registering class-specific spell schools
- Applied identically in impact execution and tooltip damage/heal estimation — power resolution is now shared via
SpellHelper.resolveImpactPower() SpellBuilder.Impacts.powerBlend()datagen helpers; authoring guide indocs/06-impacts.md, balancing guidance indocs/11-content-development-guidelines.md
- Each component merges the enabled aspects (
- Status effect
REMOVEimpacts: newALLselector (strips every matching effect at once, previously one per impact) andmovement_impairingfilter (classification-based, covers modded slows/snares);SpellBuilder.Impacts.effectRemoveMovementImpairing()helper for "freedom" dispels - Trigger
meleecondition gained acriticalfield —MELEE_IMPACTtriggers can require (or exclude) critical strikes, enabling "on melee crit" passives - Spell execution pipeline now supports performing impacts on other's behalf (ImpactContext.effectiveCaster field)
- Fine-tuned some server config defaults related to owned entities
- Added Model FX — animated 3D spell model effects spawned as world entities
- Supports per-axis
scale,translate, androtatetransforms with easing - Full easing library matching easings.net conventions (31 functions)
initial[]transforms define the starting state;animations[]drive changes over time withstart,end, andeasingfields- Extensible operation registry:
ModelEffectOperations.register()for third-party transform types model_fxfield available at:release,impacts[],area_impact,deliver.melee.swing,deliver.clouds[].spawn, and teleportdepart/arrive- Model files placed at
assets/MOD_ID/models/spell_effect/are auto-discovered
- Supports per-axis
- Reworked projectile and spell cloud models to build on the Model FX system — both can now render multiple, individually animatable models
- Projectiles: new
client_data.composite_model(andarrow_perks.composite_modelfor arrows) — a list of models, each with its ownorientation, spin, optionaluse_held_item, and anfxModel FX block driving scale/translate/rotate animation - Spell clouds: new
client_data.model_fx— a list of Model FX definitions rendered on the cloud SpellBuilder.ProjectileModelsdatagen helpers for the common cases (single,model,heldItem,composite)- Legacy single-model fields
client_data.modelandarrow_perks.override_renderare deprecated and marked for removal
- Projectiles: new
- Added Entity Summoning — a new
SUMMONimpact action that spawns and controls owned entities, fully data-drivenSpell.Impact.Action.Summon: entity type, runtime behaviour, placement formation, group layout, and spawn FX/soundSummonedEntitybase class (api.spell.summon, implementSpellSummoned) — phase-driven, owner-aware, with a full goal/targeting AISummonBehaviour: spawn→active→despawn lifespan, movement/collision modes, targeting + target-clear conditions, owner-driven attribute scaling, lifecycle sounds, and FX- Summoned entity capabilities:
- Melee attacks — windup timing, attack speed, size-scaled reach, optional AoE radius, swing/impact sounds and animation variants
- Spell casting — casts any active SpellEngine spell on cooldown, with aiming modes (track target / fire forward / self) and min/preferred/max engagement range bands
- Following — trails the owner within a distance band, teleporting to them when left too far behind
- Targeting — auto-acquires nearby hostiles or wounded allies, mirrors the owner's target, defends the owner and retaliates, with optional target-clear conditions (timeout, out-of-range, on action completed)
- Placement on
Spell.EntityPlacement(look-relative offset, ground-snap, line-of-sight clamp) withSpellBuilder.Placementsfactories:byLook,compass,square,line,circle,staggered - Groups: spawn N formations, each translated by a group placement, with summed group + per-entity spawn delays
- One-shot spawn FX/sound at individual and group level; client-side existence particles (configurable tick interval, no per-tick network traffic)
- Spell modifiers can now target the
SUMMONimpact viaSpell.Modifierfieldssummon_attribute_scaling(merged with the summon's scaling, summed per attribute)summon_spawn_count_add,summon_group_count_addsummon_behavioursub-structure adding behaviour (attack and spell casting)
- Added new spell casting mode: Charging
- Similar to regular spell casting, but can be released prematurely
- The longer the spell is charged, the stronger it becomes
- Uses spell modifier pipeline to modify spell properties based on charge time
- Reworked
spell.active.castdata structure to accommodate this feature - some fields are now marked for removal
- Added
KnockbackImmunityeffect API - status effects configured with this prevent taking knockback - Added
GlowingItemStatusEffecteffect API - status effects configured with this make the held weapon glow, in a configurable color, much brighter than the enchantment glint- Brightness scales with stacks (
opacityPerStack), colors of multiple such effects blend - Applies to weapons by default (items with main/off hand attribute modifiers), or to a given item tag
- Better Combat swing trails take on the glow color while active
- Brightness scales with stacks (
- Added
ParticleBatch.Origin:OVER_HEADcase (spawning at 1.5x height of the entity) - Added new impact type:
VELOCITY— pushes the target's velocity, for knockbacks, pulls, and mobility launches- Push is a
Vector3fin a referenceframe(LOOK= caster facing,ORIGIN= radial to the impact origin); the vector's Y is always world-up power_coefficientscales the push with the impact's spell power;reset_velocityzeroes prior motion first; hostile pushes respect knockback resistance- Synced to a player's own client, so it moves the caster too (e.g. self-mobility), not just other entities
SpellBuilder.Impactshelpers:velocity,velocityUp,knockback,pull,leap
- Push is a
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:XvoWJaA2:bdAWCDOT"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:XvoWJaA2:bdAWCDOT"
}





