- added the
EMFAnimationApiwhich allows other mods to register their own custom animation variables and functions to EMF- variables can be added to the
EMFAnimationApi- via a
FloatSupplierfor simple number variables - via a
BooleanSupplierfor simple boolean variables - via a custom variable factory if your variable requires more complex logic, such as reading complex variable names or giving different results for different contexts
- via a
- functions can be added to the
EMFAnimationApi- via a
Function<Float, Float>for simple functions witn 1 argument - via a
BiFunction<Float, Float, Float>for simple functions with 2 arguments - via a
TriFunction<Float, Float, Float, Float>for simple functions with 3 arguments - via a
Function<List<Float>, Float>for functions with a variable amount of arguments provided via a List<Float> - via a custom function factory if your function requires more complex logic, such as reading the argument strings as a value other than float
- via a
- variables can be added to the
- changed the
unknown model printingoption toModel exportingand added options to export all models info to a .jem file or the log, not just the unknown / modded ones- Models now export
Blockbenchready with correct pivots, boxes, and uvs. - models now export to
.minecraft/emf/export/
- Models now export
- implemented
is_on_head,is_in_hand&is_in_item_frame, which did nothing before - fixed a
"newstate" is nullcrash - added the
Animation LOD distancesetting which allows you to set the distance at which EMF will start skipping animation frames to save performance - added the
Retain LOD at low fpssetting which will proportionally reduce the impact of the above LOD setting while the game is running at below 60 fps, as skipped frames can become more noticeable at lower fps - reworked the config screen to use sliders where appropriate
- added
wolf_armorto the OptiFine name mappings - invalid texture overrides will no longer cause the model to fail to load but instead log an error and use the vanilla texture
- EMF log messages are now prefixed with a shorter
[EMF] - temporarily disabled texture overrides with tridents as they are broken and difficult to troubleshoot
- added debug render option
Wireframe over texturewhich renders both the wireframe and texture of a model together at the same time - added debug render option
Wireframe flashing over texturewhich renders both the wireframe and texture of a model together at the same time but the wireframe fades in and out - emf now correctly reads all texture overrides with the various relative paths set by optifine e.g.
./,~/etc - added a config setting (enabled by default) that allows EMF to modify the
enhanced block entity (EBE)mod's config to disable it for block entities that have custom EMF models loaded - fixed texture overrides acting weird with feature renderers (fixes Ewan's entity health bars cem models with villagers)
- added
left_ear&right_eartohead_piglin.jemwhich seems to be correct but missing in OptiFine's documentation :/ - reduced and reworded some of the loading log spam that would worry users (for example Fresh Animations 1.9 now sends no log errors on load)
- added EMF only rotational logic functions for radians and degrees
wrapdeg() wraprad() degdiff() raddiff()- the
wrapfunctions will wrap a rotation value down to it's smallest identical value, e.g.wrapdeg(370)will return10&wrapdeg(350)will return-10 - the
difffunctions will return the resulting difference between two rotation values factoring in the rotation, e.g.degdiff(10, 350)will return-20°diff(10, 370)will return0
- the
- added very many EMF only interpolation animation functions
catmullrom() quadbezier() cubicbezier() hermite() easeinoutexpo() easeinexpo() easeoutexpo() easeinoutcirc() easeincirc() easeoutcirc() easeinoutelastic() easeinelastic() easeoutelastic() easeinoutback() easeinback() easeoutback() easeinoutbounce() easeinbounce() easeoutbounce() easeinquad() easeoutquad() easeinoutquad() easeincubic() easeoutcubic() easeinoutcubic() easeinquart() easeoutquart() easeinoutquart() easeinquint() easeoutquint() easeinoutquint() easeinsine() easeoutsine() easeinoutsine()- hermite & catmullrom have 5 args, the bezier's have 4, the rest have 3, and all are used in the same way as
lerp()with the delta value being the first argument. - this is a good website to get an idea on what most of these look like https://easings.net/
evariable added- fixes for a certain mixin causing crashes
- EMF now supports modifying modded block entity models which use the vanilla block entity models separately from the vanilla ones
- (e.g. the
lootrmod's chest now tries to readmodded/lootr/special_loot_chest.jeminstead of conflicting withchest.jem) - enabling the "print unknown models" setting will print out these examples to the log
- (e.g. the
- completely rewrote the creation of animation Variables and Functions this should reduce memory usage and also allows other mods to add their own variables and functions
- reworded some of the translations
1.2.3
- added the following animation interpolation methods
easein,easeout,easeinout,cubiceasein,cubiceaseout,cubiceaseinout. They function identically tolerphowever offer different interpolation behaviours shadow_sizein model.jem files should now apply- more robust wolf_collar.jem implementation
- fixed a crash
layer is null - fixed
cannot inherit from final classcrash caused by completely unrelated forge mods missing their dependencies. - added the
feetpart of the new bat model to the optifine name mappings (might revert if optifine doesn't do this too) - fixed an issue preventing
mob2.jemfrom loading correctly without amob.jem(fixes reimagined's boats textures) - custom animation variables should now be correctly addressable between different parts (OptiFine parity)
- allowed emf animations to declare the same variable multiple times to update it multiple times within the same frame (OptiFine parity)
- emf updated to use etf 5.2
now works with and requires ETF 5.1+ including the same stability fixes the in() animation method now allows 2 or more parameters, instead of the previous 3 or more (OptiFine parity)
![[EMF] Entity Model Features](https://cdn.modrinth.com/data/4I1XuqiY/6e5bbd0d06b1741bfdab6c0cfab6de8fdaf0064c_96.webp)

