
Spell Engine
Spell Engine - библиотека (API) для создания магии в Minecraft. Даёт разработчикам инструменты для spells, spell books и интеграции с weapons, а игрокам - полноценную систему casting с эффектами и анимациями.
Оцените первым
5.7M
631
Список изменений
1.10.0
Important disclaimer - NeoForge users need to unequip their spell books, jewelry, relics and quivers to preserve it, before updating to this version
Notable setup changes
- Removed Forgified Fabric API dependency for the NeoForge version, now all platform API calls are fully native
- Removed Accessories mod support entirely (from both loader variants) - Accessories mod l
- Added Curious API slot mod support (NeoForge only)
Functional changes
- Fixed Spell Projectile velocity change upon bounce from terrain
- Fully translated content, now supporting 20 languages
API Changes
spell_choicegainsapply_on_choice: chosen spell id → data-component changes applied to the item (e.g.custom_model_data/custom_name), so the choice can drive the item's appearance
Completely reworked particle effect system:
ParticleBatchreplaced byParticleGroup:id+appearance(one particle) +batch(how many, where, what velocity)- Unset fields inherit the registered particle's defaults;
scale,opacityandplayback_speedmultiply with them - New appearance fields:
facing(CAMERA/GROUND/UPRIGHT/VELOCITY),motionpresets withgravity/dragoverrides,render/glow,opacity_curve,scale_multiplier/scale_easing,color_variance/scale_variance/lifetime_variance,playback_speed(negative reverses),collides facing = GROUNDquads render double-sided, so flat area decals are visible from below too- New attachment mode
POSITION_HORIZONTAL— follows the entity horizontally, but pins height to the ground below (re-probed each tick), keeping decals flush through jumps and terrain - New batch shape
NONEfor a single placed, motionless billboard batch.countis now a rate:1+ is a count per emission, below1a period (0.25= one every 4th tick, continuous FX only)- New
batch.chance(0..1) — dedicated probability field, replacing the old sub-1countoverload - Restored the per-particle lifetime randomness of the pre-1.10 particle classes — 11 elemental/smoke entries were spawning and dying in lockstep
BuffParticleSpawner.spacing(EVEN | RANDOM)decides how a leftover fractional density looks; defaults toRANDOM, matching pre-1.10 buff particlesoriginsplits intoanchor+vertical_origin;WIDE_PIPEbecomesPIPE+width_factor;rotationbecomesalignment;max_agebecomesplayback_speed(reciprocal)- New
ParticleGroupBuilderfor authoring, with reusable batch layout presets
- Unset fields inherit the registered particle's defaults;
SpellEngineParticles:EntryandTemplateEntrymerged into one entry type carrying its own defaults; category lists replaced by a singleentries()- Removed the 14
aura_effect_*entries — use the matchingarea_effect_*id withfacing = CAMERA - Removed the 32
magic_<shape>_<motion>entries — use the 8magic_<shape>entries and setmotionon the effect - Removed
weakness_smoke— it wassmoke_mediumwith a baked tint; setcolor/opacity/gravityper use instead - Removed the
electric_arc_*entries and textures — they duplicatedlightning_arc_*;ParticleGroupBuilder.electricArc(lightning_arc_A/B)reproduces their tuned look MagicParticlesnested class flattened intoSpellEngineParticles.magic_*fields
- Removed the 14
- Added
Fx.Visuals(particles + models), replacingVFXvisualsonrelease,impacts[],area_impact,deliver.melee.attacks[],deliver.clouds[].spawn/.despawn/.impact,target.beam.block_hit,teleport.depart/.arrive/.fizzle,modifiers[].release,arrow_perks.launch_visuals- Continuous particle lists are unchanged — they describe a state, not a moment
- List forms
ofParticles(List),.particles(List),.models(List)alongside the varargs
- Added
Fx.ScaleWith+Fx.Context:scale_with = RANGEon anAppearanceorModelEffectmultiplies its authoredscaleby a magnitude bound at the emission site. Sites bind only what they can supply; an unbound request keeps the authored size and warns once - Renamed
ParticleGroupEffect→ParticleGroup, its nestedParticle→Appearance(JSONparticle→appearance),ParticleGroupEffectType→ParticleGroupType,ParticleGroupBuilder.particle(...)→.appearance(...) - Renamed
ModelEffect.Easing→ top-levelEasing, now shared with particle opacity curves - Removed, with no compatibility shim:
particles/model_fxat every one-shot site — move them intovisualsrelease.scaled_with_ranged— usescale_with = RANGE. Semantics changed: the old field replaced a particle's scale with the range,scale_withmultiplies by it, so a ported particle wantsscale = 1(models already multiplied and port as-is)arrow_perks.launch_particles— usearrow_perks.launch_visualsSpell.ProjectileModeland the single-model render paths reaching it (ProjectileData.Client.model,Cloud.ClientData.model,ArrowPerks.override_render) — usecomposite_modelfor projectiles and arrows,model_fxfor cloudsCast.channel_ticks/Cast.channeled_release_fxand theresolvedType()resolver — usecast.type = CHANNELwith achannelblock, and readcast.typedirectly- The long-deprecated
EntityImmunityAPI (interface +Entitymixin) — useLivingEntityImmunity, which covers damage types, tags and status effects - The deprecated
RemoveOnHit.configure(StatusEffect, boolean)overload — pass aRemoveOnHit.Trigger(ANY_HITmatches the oldtrue)
Projectile flight physics:
- Added optional
ProjectileData.motionforFLYprojectiles (ignored byFALL/meteor delivery) —nullkeeps the classic constant-velocity, gravity-free flightgravity— downward acceleration in blocks/tick² (negative floats the projectile up), applied before drag each tick, so projectiles arc and pitch along their trajectorydrag— fraction of speed lost per tick, so0= constant speed,0.01= gentle decay,1= instant stop (above1clamps). Note this reads the opposite way to Minecraft's retained-fraction conventionmin_speed— expires a decelerating projectile (impact-less) once it slows below this, so drag without gravity doesn't leave it hovering until the age cap- Medium-aware drag:
drag_fluidapplies inside any fluid — vanilla or modded, detected generically viaFluidState— andfluid_overrides[]fine-tune per fluid with their owndragand agravity_multiply(buoyancy). Selectors use the sharedPatternMatchingsyntax (#tag,~regex,!negate,*, exact id)
Description tokens:
- Added the parametric effect token
{effect|<effect_id>|<amplifier>|<attribute>|<format>}— reads a status effect's attribute modifier straight off the registry, with amplifier scaling (base × (amplifier + 1)), attribute selection by id (blank falls back to the effect's first modifier), and a sign-onlyformat(abs,+). Resolution is player-independent and memoised until a registry resync. See Description Tokens - This makes an effect's non-first modifier addressable and replaces the per-spell
DescriptionMutatorpattern for effect values (e.g. Frostbite can show both its movement- and attack-speed values) - Added
TooltipTokens— a dependency-free, server-safe home for token names, theeffect(...)builders, the value-formatting primitives (percent,bonus,formattedNumber) and the programmatic escape hatchTooltipTokens.Custom(register viaregisterCustom), so descriptions can be built without touching client-only code.SpellTooltip's former API — includingDescriptionMutator/addDescriptionMutator— remains as deprecated delegates into the same registry
Added EntityTints — status-effect-driven ARGB tinting of a living entity's whole rendered appearance:
- Register a
Tintagainst a status effect (EntityTints.register) and every entity carrying it is tinted for all players tracking it: body model, worn armor and every otherModelPart-based render pass — no integration needed from armor/feature renderers, as the tint rides the vanillaModelPartcolor argument (Sodium/Iris compatible) Tintderives its color from the entity and the effect instance;Tint.flat(argb)for a constant color,Tint.scaling(argb, strengthPerStack)to strengthen from neutral per effect stack (amplifier + 1)- Concurrent tints blend by componentwise multiplication (order-independent, alphas compound); the blend recomputes server side whenever the effect set changes and reaches clients as tracked data —
EntityTints.resolve(entity)server side,EntityTints.currentTint(entity)anywhere - Alpha below 1 turns the whole entity translucent: the body swaps to the render layer vanilla uses for spectators, and armor layers are made blend-capable (the same swap Shoulder Surfing applies, idempotent alongside it)
Other changes:
- Moved all content config types (
WeaponConfig,ArmorSetConfig, etc...) intorpg_seriespackage scope EffectConfignow supportsConditionalAttributes
Файлы
spell_engine-neoforge-1.10.0+1.21.1.jar(4.35 MiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
1.10.0+1.21.1-neoforge
Загрузчики
NeoForge
Версии игры
1.21–1.21.1
Загрузок
705
Дата публикации
20.08.2026
