{
  "entity_model_features.config.animate_once": "Animate models once per entity",
  "entity_model_features.config.animate_once.tooltip": "On by default\nthis setting makes it so entity models will animate only once per each entity rendered\nthis will be entirely normal in game however mobs visible in\n inventory screens may flicker weirdly\n especially if it represents a real mob in the world you can already see",
  "entity_model_features.config.debug": "Debugging",
  "entity_model_features.config.optifine_floor": "Floor box UVs",
  "entity_model_features.config.optifine_floor.tooltip": "OptiFine floors all UV values in custom box UV's\ni.e. it makes them all whole numbers.\nThis setting will make EMF do the same\nEMF will also log if it finds a model that doesn't have floored UVs",
  "entity_model_features.config.optifine_syntax": "CEM animation syntax limits",
  "entity_model_features.config.optifine_syntax.tooltip": "If enabled this will enforce OptiFine's CEM syntax limitations, such as\nbone ids in animations cannot start with _ or numbers.\nnumbers cannot start with '.' such as '.9'\nbones named 'render' cannot be referenced by animations\nThis setting when enabled will log errors for any animations that violate these rules and invalidate them.",
  "entity_model_features.config.models.explain": "Not all parts visible here may export\nonly declared parts will.\nYou can find out the missing part's transform details by checking the game log after exporting.",
  "entity_model_features.config.optifine_subfolders": "Subfolder models MUST variate",
  "entity_model_features.config.optifine_subfolders.tooltip": "In OptiFine the subfolder option for model files only works if that model variates.\nE.G. 'optifine/cem/skeleton/skeleton.jem' will only load if it has variants\nsuch as 'optifine/cem/skeleton/skeleton2.jem' or a .properties file\nThis setting will make EMF also enforce this,\nEMF will log this if it finds a model that doesn't variate",
  "entity_model_features.config.debug.tooltip": "Debug options, can be helpful to figure some things out",
  "entity_model_features.config.debug_right_click": "Show EMF debug data on entity right click",
  "entity_model_features.config.debug_right_click.tooltip": "If enabled, this will print out EMf debug info into\nthe log and chat when an entity is right clicked.",
  "entity_model_features.config.ebe_config_modify": "Enhanced Block Entities (EBE) Mod patch",
  "entity_model_features.config.ebe_config_modify.tooltip": "If enabled, this will allow EMF to modify the EBE Mod's config\nto disable EBE for certain block entities if that\nBlock Entity actually has a custom EMF model loaded.\nEMF cannot automatically re enable these settings afterwards,\n you will have to do that manually if desired.",
  "entity_model_features.config.force_models": "Try to prevent EMF models being overridden",
  "entity_model_features.config.force_models.tooltip": "Will try and force entity renderers to use the models set by EMF\n this can override vanilla models changed by other mods\n this wont work with all mods",
  "entity_model_features.config.function_explanation.abs": "abs(x)\nGet the absolute value of a number. Will turn negative numbers positive",
  "entity_model_features.config.function_explanation.acos": "acos(x)\nGet the arc cosine of x",
  "entity_model_features.config.function_explanation.asin": "asin(x)\nGet the arc sine of x",
  "entity_model_features.config.function_explanation.atan": "atan(x)\nGet the arc tangent of x",
  "entity_model_features.config.function_explanation.atan2": "atan2(y, x)\nGet the angle between the positive x-axis and the point (x, y)",
  "entity_model_features.config.function_explanation.catmullrom": "catmullrom(k, x, y, z, w)\nInterpolates between x and y using the catmull-rom spline function with control points z and w",
  "entity_model_features.config.function_explanation.ceil": "ceil(x)\nRound x up to the nearest whole number",
  "entity_model_features.config.function_explanation.clamp": "clamp(x, min, max)\nLimits a number to be between min and max values",
  "entity_model_features.config.function_explanation.cos": "cos(x)\nGet the cosine of x",
  "entity_model_features.config.function_explanation.nbt": "nbt(x,y)\nBoolean function that returns true if the entity has the NBT tag x matching the query y.\nx is equivalent to what comes after 'nbt.<n>.' in the NBT random property.\ny is equivalent to what comes after the '=' in the NBT random property.\ne.g. 'nbt.1.SleepingX=exists:true' in the NBT property will be 'nbt(SleepingX,exists:true) in the animation function'.",
  "entity_model_features.config.function_explanation.cubicbezier": "cubicbezier(k, x, y, z, w)\nInterpolates between x and y using the cubic bezier spline function with control points z and w",
  "entity_model_features.config.function_explanation.degdiff": "degdiff(x, y)\nReturns the shortest angular degree difference between two degree values x and y",
  "entity_model_features.config.function_explanation.easeinback": "easeinback(k, x, y)\nInterpolates between x and y using the ease in back function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinbounce": "easeinbounce(k, x, y)\nInterpolates between x and y using the ease in bounce function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeincirc": "easeincirc(k, x, y)\nInterpolates between x and y using the ease in circ function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeincubic": "easeincubic(k, x, y)\nInterpolates between x and y using the ease in cubic function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinelastic": "easeinelastic(k, x, y)\nInterpolates between x and y using the ease in elastic function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinexpo": "easeinexpo(k, x, y)\nInterpolates between x and y using the ease in expo function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutback": "easeinoutback(k, x, y)\nInterpolates between x and y using the ease in and ease out back function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutbounce": "easeinoutbounce(k, x, y)\nInterpolates between x and y using the ease in and ease out bounce function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutcirc": "easeinoutcirc(k, x, y)\nInterpolates between x and y using the ease in and ease out circ function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutcubic": "easeinoutcubic(k, x, y)\nInterpolates between x and y using the ease in and ease out cubic function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutelastic": "easeinoutelastic(k, x, y)\nInterpolates between x and y using the ease in and ease out elastic function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutexpo": "easeinoutexpo(k, x, y)\nInterpolates between x and y using the ease in and ease out expo function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutquad": "easeinoutquad(k, x, y)\nInterpolates between x and y using the ease in and ease out quad function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutquart": "easeinoutquart(k, x, y)\nInterpolates between x and y using the ease in and ease out quart function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutquint": "easeinoutquint(k, x, y)\nInterpolates between x and y using the ease in and ease out quint function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinoutsine": "easeinoutsine(k, x, y)\nInterpolates between x and y using the ease in and ease out sine function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinquad": "easeinquad(k, x, y)\nInterpolates between x and y using the ease in quad function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinquart": "easeinquart(k, x, y)\nInterpolates between x and y using the ease in quart function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinquint": "easeinquint(k, x, y)\nInterpolates between x and y using the ease in quint function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeinsine": "easeinsine(k, x, y)\nInterpolates between x and y using the ease in sine function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutback": "easeoutback(k, x, y)\nInterpolates between x and y using the ease out back function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutbounce": "easeoutbounce(k, x, y)\nInterpolates between x and y using the ease out bounce function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutcirc": "easeoutcirc(k, x, y)\nInterpolates between x and y using the ease out circ function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutcubic": "easeoutcubic(k, x, y)\nInterpolates between x and y using the ease out cubic function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutelastic": "easeoutelastic(k, x, y)\nInterpolates between x and y using the ease out elastic function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutexpo": "easeoutexpo(k, x, y)\nInterpolates between x and y using the ease out expo function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutquad": "easeoutquad(k, x, y)\nInterpolates between x and y using the ease out quad function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutquart": "easeoutquart(k, x, y)\nInterpolates between x and y using the ease out quart function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutquint": "easeoutquint(k, x, y)\nInterpolates between x and y using the ease out quint function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.easeoutsine": "easeoutsine(k, x, y)\nInterpolates between x and y using the ease out sine function\n\nexamples here: https://easings.net/",
  "entity_model_features.config.function_explanation.exp": "exp(x)\nGet e (Euler's constant) raised to the power of x",
  "entity_model_features.config.function_explanation.floor": "floor(x)\nRound x down to the nearest whole number",
  "entity_model_features.config.function_explanation.fmod": "fmod(x, y)\nSimilar to the % operator, but the returned value always has the same sign as the divisor",
  "entity_model_features.config.function_explanation.frac": "frac(x)\nGet the fractional part of x (what's behind the decimal point)",
  "entity_model_features.config.function_explanation.hermite": "hermite(k, x, y, z, w)\nInterpolates between x and y using the hermite spline function with control points z and w",
  "entity_model_features.config.function_explanation.if": "if(cond, val, [cond2, val2, ...], val_else)\nSelect a value based one or more conditions",
  "entity_model_features.config.function_explanation.keyframe": "keyframe(k, a, b, c,...)\nInterpolates smoothly between values based on the current frame 'k' and the keyframes. 'a' is 'k=0', 'b' is 'k=1', 'c' is 'k=2' etc.",
  "entity_model_features.config.function_explanation.keyframeloop": "keyframeloop(k, a, b, c,...)\nInterpolates smoothly between values based on the current frame 'k' and the keyframes. 'a' is 'k=0', 'b' is 'k=1', 'c' is 'k=2' etc. but loops the animation back to frame 'a' when 'k' is greater than the number of keyframes",
  "entity_model_features.config.function_explanation.lerp": "lerp(k, x, y)\nLinear interpolation between X and Y",
  "entity_model_features.config.function_explanation.log": "log(x)\nGet the natural logarithm of x",
  "entity_model_features.config.function_explanation.max": "max(x, y, ...)\nGet the largest number from a list of numbers",
  "entity_model_features.config.function_explanation.min": "min(x, y ,...)\nGet the smallest number from a list of numbers",
  "entity_model_features.config.function_explanation.pow": "pow(x, y)\nGet x raised to the power of y",
  "entity_model_features.config.function_explanation.print": "print(id, n, x)\nPrints the value \"x\" every N-th frame",
  "entity_model_features.config.function_explanation.printb": "printb(id, n, x)\nPrints the boolean value \"x\" every N-th frame",
  "entity_model_features.config.function_explanation.quadbezier": "quadbezier(k, x, y, z)\nInterpolates between x and y using the quadratic bezier spline function with control point z",
  "entity_model_features.config.function_explanation.raddiff": "raddiff(x, y)\nReturns the shortest angular radian difference between two radian values x and y",
  "entity_model_features.config.function_explanation.random": "random(seed)\nRandom number from 0 to 1. Providing a seed will always return the same result. The seed is optional",
  "entity_model_features.config.function_explanation.round": "round(x)\nRound x to nearest whole number",
  "entity_model_features.config.function_explanation.signum": "signum(x)\nGet the sign of x (positive or negative)",
  "entity_model_features.config.function_explanation.sin": "sin(x)\nGet the sine of x",
  "entity_model_features.config.function_explanation.between": "between(x, min, max)\nCheck if a value is between min and max values",
  "entity_model_features.config.function_explanation.equals": "equals(x, y, epsilon)\nCompare two float values with error margin",
  "entity_model_features.config.function_explanation.in": "in(x, val1, val2, ...)\nCheck if a value equals one of several values",
  "entity_model_features.config.function_explanation.sqrt": "sqrt(x)\nGet the square root of x",
  "entity_model_features.config.function_explanation.tan": "tan(x)\nGet the tangent of x",
  "entity_model_features.config.function_explanation.ifb": "if(cond, val, [cond2, val2, ...], val_else)\nSelect a value based one or more conditions\nOnly returns boolean values",
  "entity_model_features.config.function_explanation.randomb": "random(seed)\nRandom boolean true|false. Providing a seed will always return the same result. The seed is optional",
  "entity_model_features.config.function_explanation.catch": "catch(x,c,id)\nWill return x, however if x is NaN or causes some other animation error then c will get returned instead.\nid is optional, if it is added the catch function will print the reason c was used to the game log with this id\nPrimarily intended for animation debugging, if there is a chance something will trigger this you should really be fixing that instead.",
  "entity_model_features.config.function_explanation.todeg": "todeg(rad)\nConvert radians to degrees",
  "entity_model_features.config.function_explanation.torad": "torad(deg)\nConvert degrees to radians",
  "entity_model_features.config.function_explanation.wrapdeg": "wrapdeg(x)\nWraps the degree value x to the range -180 to 180 that it matches",
  "entity_model_features.config.function_explanation.wraprad": "wraprad(x)\nWraps the radian value x to the range -pi to pi that it matches",
  "entity_model_features.config.general": "General",
  "entity_model_features.config.general.tooltip": "General settings",
  "entity_model_features.config.large_mob_lod": "Retain LOD for larger mobs",
  "entity_model_features.config.large_mob_lod.tooltip": "If enabled this will reduce the Level of Detail (LOD)\nimpact of the above setting according to the mobs size.\nLarger mobs will have less noticeable skipped frames\nthan smaller mobs",
  "entity_model_features.config.lod": "Animation LOD distance",
  "entity_model_features.config.lod.tooltip": "Sets the distance at which animations will begin to skip frames,\nlower the Level of Detail (LOD), This can help with performance\nNone = no frame skipping\n16 = will skip 1 frame for every 16 blocks distance from player\nLower numbers mean more skipped frames and more performance gain\nbut of course animations will become more noticeably lower\nframerate the closer the LOD distance is set",
  "entity_model_features.config.log_math": "Log animation calculations",
  "entity_model_features.config.log_math.tooltip": "Prints animation math debug data to the log\nWARNING EXTREMELY LAG INDUCING!",
  "entity_model_features.config.log_models": "Log model construction info",
  "entity_model_features.config.log_models.tooltip": "Prints model creation debug data to the log",
  "entity_model_features.config.low_fps_lod": "Retain LOD at low fps",
  "entity_model_features.config.low_fps_lod.tooltip": "If enabled this will reduce the Level of Detail (LOD)\nimpact of the above setting according to your fps.\nOnly applies when below 60 fps as skipped frames\nbecome increasingly noticeable at lower fps",
  "entity_model_features.config.optimizations": "Optimization",
  "entity_model_features.config.optimizations.tooltip": "Settings related to animation optimization",
  "entity_model_features.config.options": "Options & fixes",
  "entity_model_features.config.options.tooltip": "Various options for fundamental features or mod compatibility fixes",
  "entity_model_features.config.performance": "Performance settings",
  "entity_model_features.config.physics": "Physics mod patch",
  "entity_model_features.config.physics.1": "Use vanilla model",
  "entity_model_features.config.physics.2": "Use EMF (CEM) model",
  "entity_model_features.config.physics.tooltip": "Will only render the original vanilla model parts on death if physics mod is enabled\n this partially works but is not a perfect solution",
  "entity_model_features.config.print_mode": "Model exporting",
  "entity_model_features.config.print_mode.all_log": "All models - Log only",
  "entity_model_features.config.print_mode.all_log_jem": "All models - Log & .jem",
  "entity_model_features.config.print_mode.log": "Unknown models - Log only",
  "entity_model_features.config.print_mode.log_jem": "Unknown models - Log & .jem",
  "entity_model_features.config.print_mode.tooltip": "this will print out the part information or a complete .jem file\nfor any model that EMF can access EVERY RELOAD!!\nThe .jem files can be found in \"MC_DIRECTORY/emf/export\" after a reload\nThe .jem files are Blockbench ready with\ncorrect pivots boxes and uvs\nUnknown models refers to models not supported by OptiFine CEM",
  "entity_model_features.config.debug_hover": "Debug render only on hover",
  "entity_model_features.config.debug_hover.tooltip": "Makes the above render setting only apply to entity being hovered over by the client.\nI.E. directly looked at by you.",
  "entity_model_features.config.render": "Debug render mode",
  "entity_model_features.config.render.green": "Flash green",
  "entity_model_features.config.render.lines": "Wireframe only",
  "entity_model_features.config.render.lines_texture": "Wireframe over texture",
  "entity_model_features.config.render.lines_texture_flash": "Wireframe flashing over texture",
  "entity_model_features.config.render.none": "Disabled",
  "entity_model_features.config.render.normal": "Normal",
  "entity_model_features.config.render.tooltip": "Changes how custom model parts are rendered, this does not affect vanilla model parts.\nNormal = normal rendering\nFlash green = the custom parts will flash green\nOutlines = the outlines of the model parts will render\nDisabled = custom model parts will not render",
  "entity_model_features.config.substitute_vanilla": "Substitute missing model parts",
  "entity_model_features.config.substitute_vanilla.tooltip": "EMF will try to replace missing part in the .jem\n model file with the vanilla counterpart",
  "entity_model_features.config.texture_override_mode": "Sub-model texture handling",
  "entity_model_features.config.texture_override_mode.dont": "Ignore texture overrides",
  "entity_model_features.config.texture_override_mode.emf": "Try with EMF code",
  "entity_model_features.config.texture_override_mode.iris": "Try with Iris first",
  "entity_model_features.config.texture_override_mode.tooltip": "This controls how EMF handles rendering sub-models that have an override texture set\nfor example if a creeper model has a separate texture for the head sub-model\nThere are two ways to do this, rely on my code, or rely on a quirk of the Iris mod\nMy code 'works' but I am not an expert with render buffers and it may cause issues\nThe Iris quirk uses a pretty straightforward and seemingly safe/stable method but i'm told its not intended Iris behaviour\nThe Iris option will default to the EMF code if Iris isn't installed\nthis should almost always be left on default except when debugging texture overrides in sub-models",
  "entity_model_features.config.tools": "Tools",
  "entity_model_features.config.tools.tooltip": "Optional tools to help with model making or distinguishing custom models",
  "entity_model_features.config.update": "Model update rate",
  "entity_model_features.config.update.tooltip": "Sets how often a mobs model will\nupdate for changes like health & age\nNever = never update\nSlow = 3-5 seconds\nAverage = about 1 second\nFast = less than a second\nInstant = instant (possible lag with hundred of mobs)",
  "entity_model_features.config.vanilla_render": "Vanilla model display mode",
  "entity_model_features.config.vanilla_render.normal": "normal",
  "entity_model_features.config.vanilla_render.offset": "offset",
  "entity_model_features.config.vanilla_render.tooltip": "This setting will render the vanilla model alongside the custom one for comparison\nIt will not animate and thus might be positioned a bit weird",
  "entity_model_features.config.variable_explanation.age": "Age in ticks",
  "entity_model_features.config.variable_explanation.is_swinging_right_arm": "True if the entity is swinging its right arm. Note false does not mean the other arm is swinging",
  "entity_model_features.config.variable_explanation.is_swinging_left_arm": "True if the entity is swinging its left arm. Note false does not mean the other arm is swinging",
  "entity_model_features.config.variable_explanation.anger_time": "The remaining entity angry time in ticks. Starts with 400-780 while agressive, and then counts down to 0 when the target is lost",
  "entity_model_features.config.variable_explanation.anger_time_start": "The start value of anger_time ",
  "entity_model_features.config.variable_explanation.day_count": "The current day count",
  "entity_model_features.config.variable_explanation.day_time": "The current day time in ticks (0-24000)",
  "entity_model_features.config.variable_explanation.death_time": "The time the entity is dead. Counts up from 0 to 20",
  "entity_model_features.config.variable_explanation.dimension": "The current dimension. Overworld: 0, Nether: -1, End: 1",
  "entity_model_features.config.variable_explanation.distance": "The entities distance from the client player in blocks\n\nwhile the distance variable was added for convenience, the same can be achieved on OptiFine with the following code:\n\"var.distance\": \"sqrt(pow(pos_x  -player_pos_x, 2) + pow(pos_y - player_pos_y, 2) + pow(pos_z - player_pos_z, 2))\"",
  "entity_model_features.config.variable_explanation.e": "Euler's number\n2.718281.....",
  "entity_model_features.config.variable_explanation.entity_variable": "Entity variables are specified in the format \"var.<name>\" (float) or \"varb.<name>\" (boolean) \n\nThe name can be any string, for example \"var.xyz\", \"var.last_rx\", etc.\n\nThe variable is attached to the rendered entity and has a default value 0 or false.\n\nEntity variables are useful for storing animation data between frames.",
  "entity_model_features.config.variable_explanation.entity_variable.title": "Entity variables",
  "entity_model_features.config.variable_explanation.false": "Constant value\nfalse",
  "entity_model_features.config.variable_explanation.fluid_depth": "The depth of the fluid above and below a submerged entity, 0 if not submerged",
  "entity_model_features.config.variable_explanation.fluid_depth_down": "The depth of the fluid below a submerged entity, 0 if not submerged",
  "entity_model_features.config.variable_explanation.fluid_depth_up": "The depth of the fluid above a submerged entity, 0 if not submerged",
  "entity_model_features.config.variable_explanation.frame_time": "The time in seconds since the last frame",
  "entity_model_features.config.variable_explanation.head_pitch": "Head pitch (x Rotation)",
  "entity_model_features.config.variable_explanation.head_yaw": "Head yaw   (y rotation)",
  "entity_model_features.config.variable_explanation.health": "The entity's current health",
  "entity_model_features.config.variable_explanation.height_above_ground": "The distance the entity is above the ground\nground being the highest point below the entity with a collidable block",
  "entity_model_features.config.variable_explanation.hurt_time": "The time the entity is hurt for. Counts down from 10 to 0",
  "entity_model_features.config.variable_explanation.id": "A unique numeric identifier for the entity\nalways the same for the same entity",
  "entity_model_features.config.variable_explanation.is_aggressive": "If the entity is aggressive towards a player or another entity",
  "entity_model_features.config.variable_explanation.is_alive": "If the entity is alive",
  "entity_model_features.config.variable_explanation.is_blocking": "If the entity is blocking with a shield",
  "entity_model_features.config.variable_explanation.is_burning": "If the entity is on fire",
  "entity_model_features.config.variable_explanation.is_child": "If the entity is in its baby state",
  "entity_model_features.config.variable_explanation.is_climbing": "If the entity is climbing a climbable block or is a spider on a wall",
  "entity_model_features.config.variable_explanation.is_crawling": "If the entity is crawling",
  "entity_model_features.config.variable_explanation.is_glowing": "If the entity has the Glowing effect",
  "entity_model_features.config.variable_explanation.is_hurt": "If the entity is taking damage",
  "entity_model_features.config.variable_explanation.frame_counter": "The index of the current frame (0 to 720719, then resets to 0)",
  "entity_model_features.config.variable_explanation.is_in_ground": "If a trident is impaled in the ground",
  "entity_model_features.config.variable_explanation.is_in_gui": "If the entity is inside the GUI",
  "entity_model_features.config.variable_explanation.is_in_hand": "If the entity is being held in your hand",
  "entity_model_features.config.variable_explanation.is_in_item_frame": "If the entity is in an item frame",
  "entity_model_features.config.variable_explanation.is_in_lava": "If the entity is touching lava",
  "entity_model_features.config.variable_explanation.is_in_water": "If the entity is touching water",
  "entity_model_features.config.variable_explanation.is_invisible": "If the entity has the Invisibility effect/NBT tag",
  "entity_model_features.config.variable_explanation.is_on_ground": "If the entity is touching the ground",
  "entity_model_features.config.variable_explanation.is_on_head": "If the entity is worn on another entity's head",
  "entity_model_features.config.variable_explanation.is_on_shoulder": "If a parrot is sitting on your shoulder",
  "entity_model_features.config.variable_explanation.is_ridden": "If the entity is being ridden by another entity",
  "entity_model_features.config.variable_explanation.is_riding": "If the entity is riding another entity",
  "entity_model_features.config.variable_explanation.is_sitting": "If a cat/wolf/parrot is sitting",
  "entity_model_features.config.variable_explanation.is_sneaking": "If a cat/ocelot is sneaking",
  "entity_model_features.config.variable_explanation.is_jumping": "If a living mob is jumping",
  "entity_model_features.config.variable_explanation.is_sprinting": "If a cat/ocelot is sprinting",
  "entity_model_features.config.variable_explanation.is_tamed": "If a cat/wolf/parrot is tamed",
  "entity_model_features.config.variable_explanation.is_wet": "If the entity is inside water/rain",
  "entity_model_features.config.variable_explanation.is_right_handed": "If the player is right handed",
  "entity_model_features.config.variable_explanation.is_swimming": "If the entity is swimming",
  "entity_model_features.config.variable_explanation.is_gliding": "If the entity is gliding",
  "entity_model_features.config.variable_explanation.is_first_person_hand": "If the game is currently rendering the first person hand",
  "entity_model_features.config.variable_explanation.limb_speed": "Limb movement speed. Ranges from 0 to 1 (still = 0, sprinting = 1)",
  "entity_model_features.config.variable_explanation.limb_swing": "Limb animation counter. Counts up in ticks when the entity moves",
  "entity_model_features.config.variable_explanation.max_health": "The entity's maximum health",
  "entity_model_features.config.variable_explanation.model_part": "Model variables are specified in the format\n \"<model>.<variable_name>\"\n\nThe model can be:\n \"this\" - current custom model\n \"part\" - the original part model to which the custom model is attached\n \"<part>\" - original model by part name\n \"<id>\" - custom model by ID\n \"<part>:<sub_id>:<sub_sub_id>:...\" - (hierarchical) start with original model by part name, then find children by ID\n \"<id>:<sub_id>:<sub_sub_id>:...\" - (hierarchical) start with model by ID, then find children by ID\n\nThe first model found by part name or ID is used if there are duplicates.\nThe model search by ID is deep, also when used in a hierarchical specification. \n\nThe hierarchical specification allows model groups (json part models) to be reused for different parts. \nFor example one hand model (\"shoulder:upper_arm:elbow:forearm:palm:finger[1.5]\" can be used for both left and right hand.\nThe animation can use \"left_hand:finger1\" for the left thumb and \"right_hand:finger1\" for the right thumb. \nThe intermediate parents in the hierarchical specification can be skipped. \n\nVariable names\n tx, ty, tz    - Translation x, y, z\n rx, ry, rz    - Rotation x, y, z\n sx, sy, sz    - Scale x, y, z\n visible       - Show model and submodels (boolean)\n visible_boxes - Show model only, does not affect submodels (boolean)",
  "entity_model_features.config.variable_explanation.model_part.title": "Model part variables",
  "entity_model_features.config.variable_explanation.move_forward": "The entity's current movement in the direction they are facing. Ranges from -1 to 1 denoting the Y axis intercept of a unit circle of the players current movement vector. 1 is forward, -1 is backward",
  "entity_model_features.config.variable_explanation.move_strafing": "The entity's current movement in the direction 90 degrees to the right of their facing direction. Ranges from -1 to 1 denoting the X axis intercept of a unit circle of the players current movement vector.",
  "entity_model_features.config.variable_explanation.nan": "Not a number\nthrows an exception during runtime\nused for debugging",
  "entity_model_features.config.variable_explanation.pi": "Constant value\n3.1415926",
  "entity_model_features.config.variable_explanation.is_using_item": "If the entity is currently using an item, e.g. player right clicking with a bucket",
  "entity_model_features.config.variable_explanation.is_holding_item_right": "If an item is held in the entities right hand slot",
  "entity_model_features.config.variable_explanation.is_holding_item_left": "If an item is held in the entities left hand slot",
  "entity_model_features.config.variable_explanation.player_pos": "The client players current world position",
  "entity_model_features.config.variable_explanation.player_rot": "The client players current world rotation. North is 0",
  "entity_model_features.config.variable_explanation.pos": "The entities current world position",
  "entity_model_features.config.variable_explanation.render_variable": "Render variables\n render.shadow_size\n - The size of the shadow underneath an entity\n render.shadow_opacity\n - How transparent the shadow is\n render.shadow_offset_x, render.shadow_offset_z\n - The location of the shadow\n  render.leash_offset_x, render.leash_offset_y, render.leash_offset_z\n - The position of the point the leash attaches to",
  "entity_model_features.config.variable_explanation.render_variable.title": "Render variables",
  "entity_model_features.config.variable_explanation.rot": "The entities current world rotation. North is 0",
  "entity_model_features.config.variable_explanation.rule_index": "The index of the current matching random models rule. Defaults to 0",
  "entity_model_features.config.variable_explanation.swing_progress": "How far through an attack the entity is. Counts up from 0 to 1",
  "entity_model_features.config.variable_explanation.time": "The total game time in ticks, not related to the daylight cycle",
  "entity_model_features.config.variable_explanation.true": "Constant value\ntrue",
  "entity_model_features.config.models": "All models",
  "entity_model_features.config.models.enabled": "Enable model",
  "entity_model_features.config.models.enabled.tooltip": "Sets whether or not to load the given .jem model file",
  "entity_model_features.config.models.part_names": "Part names for this model",
  "entity_model_features.config.models.export": "Export model as .jem file",
  "entity_model_features.config.models.export.tooltip": "Exports this model as .jem file to the directory \"MC_DIRECTORY/emf/export\"\nThis file can be opened in Blockbench and contains all the necessary data for a custom model\nincluding pivot points, boxes, and UVs\nAdditional data will also be printed in the log, such as where to put this .jem file for use in a resource pack.",
  "entity_model_features.config.models.export.success": "Exported model successfully",
  "entity_model_features.config.models.export.fail": "Model cannot be exported, because:",
  "entity_model_features.config.models.arrows": "arrow.jem & spectral_arrow.jem will not appear here, but are both supported",
  "entity_model_features.config.models.cape": "\nplayer_cape.jem will not appear here, but is also supported, it is an exact copy of player.jem but only the 'cloak' part",
  "entity_model_features.config.variables": "Variables",
  "entity_model_features.config.functions": "Functions",
  "entity_model_features.config.player_settings": "Player settings",
  "entity_model_features.config.only_client": "Only modify your player model",
  "entity_model_features.config.only_client.tooltip": "If enabled this will only apply custom player models to your own player\nignoring all others in multiplayer",
  "entity_model_features.config.math": "Animation math details",
  "entity_model_features.config.math.explain": "This section provides details on the math functions and variables available for use in EMF custom entity model animations.\nIncluding anything added to EMF from another mod using it's API.\nEach function and variable will provide more details when clicked on.",
  "entity_model_features.config.variables.explain": "A list of all the math variables currently registered for use in EMF custom entity model animations.\nEach variable will provide more details when clicked on.",
  "entity_model_features.config.functions.explain": "A list of all the math functions currently registered for use in EMF custom entity model animations.\nEach function will provide more details when clicked on.",
  "entity_model_features.title": "Entity Model Features",
  "entity_model_features.suffix_property": "Model Suffix (Optional)\nmatches the last random model suffix number that the entities model was set to\ndefaults to 0\nExample: modelSuffix.1= 2 4 6\n§amodelSuffix.<n>=<list>",
  "entity_model_features.rule_property": "Model Rule (Optional)\nmatches the last random model rule number that the entities model matched against\ndefaults to 0\nExample: modelRule.1= 2 4 6\n§amodelRule.<n>=<list>",
  "entity_model_features.var_property": "Entity Variable Float (Optional)\nmatches the CEM animation variable value of the entity\ndefaults to 0\nExample: (for animation variable 'var.xyz') var.1.xyz= 2 4 6\n§avar.<n>.<variable>=<list>",
  "entity_model_features.varb_property": "Entity Variable Boolean (Optional)\nmatches the CEM animation variable value of the entity\ndefaults to false\nExample: (for animation variable 'varb.xyz') varb.1.xyz=true\n§avarb.<n>.<variable>=<true|false>",
  "entity_model_features.global_var_property": "Global Variable Float (Optional)\nmatches the CEM animation global variable value\ndefaults to 0\nExample: (for animation variable 'global_var.xyz') global_var.1.xyz= 2 4 6\n§aglobal_var.<n>.<variable>=<list>",
  "entity_model_features.global_varb_property": "Global Variable Boolean (Optional)\nmatches the CEM animation global variable value\ndefaults to false\nExample: (for animation variable 'global_varb.xyz') global_varb.1.xyz=true\n§aglobal_varb.<n>.<variable>=<true|false>",
  "entity_model_features.config.variable_explanation.global_variable": "Global variables are specified in the format \"global_var.<name>\" (float) or \"global_varb.<name>\" (boolean) \nThe name can be any string, for example \"global_var.xyz\", \"global_var.last_rx\", etc.\nThe variable is globally saved and has a default value 0 or false.\nGlobal variables are useful for storing animation data used by multiple entities.",
  "entity_model_features.config.variable_explanation.global_variable.title": "Global variables",
  "entity_model_features.config.variable_explanation.optifine_parts": "OptiFine part names:",
  "entity_model_features.config.variable_explanation.unknown_parts": "Un mapped part names:",
  "entity_model_features.config.prevent_hand": "Prevent first person hand animations",

  "entity_model_features.config.reset_player": "Reset player model every render",
  "entity_model_features.config.reset_player.tooltip": "This makes EMF reset all the vanilla part transforms of player models well before every render.\nOnly applies if custom models are present for the player.\nThis is not the typical behaviour however with how many mods alter player animations\nthis setting vastly reduces the difficulty of player animation compatibility between mods and animation packs.\nE.G. player emote mods.\nThis compatibility still requires work on the pack makers end.",
  "entity_model_features.config.models.file_names": "File names & Locations",
  "entity_model_features.config.prevent_hand.tooltip": "If enabled this will forcibly prevent all custom EMF animations from playing on the first person hand model",
  "entity_model_features.config.models_text": "These are all the models modifiable via EMF\nThese screens will only show / export information about these models unmodified state\nIf you want to see the current state of a model you will have to look at the model in game",
  "entity_model_features.config.ebe_warn.1": "Some EBE mod options have been forcibly disabled by EMF",
  "entity_model_features.config.ebe_warn.2": "This happens because a resource-pack is loading a custom model for that block entity",
  "entity_model_features.config.ebe_warn.3": "Currently disabling these options: ",
  "entity_model_features.config.ebe_warn.4": "This can be changed in EMF's model settings",
  "entity_model_features.config.variation_base": "Require base models for variation",
  "entity_model_features.config.variation_base.tooltip": "It is a best practise with OptiFine to require a 'base' model for variation, as this can be very inconsistent with OptiFine. With the setting enabled this will mean 'pig2.jem' will not variate without a 'pig.jem'.\nEMF does not require this, but will enforce it if enabled here as it is best to preserve OptiFine compatibility where possible.\nYou can easily get a default model by exporting it in the EMF settings via 'models > allmodels > *model* > export'.\nOr just disable this setting.",
  "entity_model_features.config.double_chest_fix": "Fix double chest model log errors",
  "entity_model_features.config.double_chest_fix.tooltip": "Because the double chest model, 'chest_large.jem', has to be split into 2 half models in the code\nthere can be excessive log spam about the missing left/right half.\nThis option fixes that if enabled and also somewhat fixes animations referring to the opposite side of the chest.\nYou are still highly recommended to keep the left and right half animations separate.\nThis is an option because other mods affecting chest models may potentially have an issue with this.",
  "entity_model_features.config.iris_shadow_skip": "Skip animating Iris shadow pass",
  "entity_model_features.config.iris_shadow_skip.tooltip": "This will make it so the entity model doesn't animate twice\neach frame for both the render and the iris shadow pass\nthis should always be ON and is only here in case of\nfuture breaking iris api changes"
}