Skip to content

Instantly share code, notes, and snippets.

@superpowers04
Last active February 3, 2022 07:23
Show Gist options
  • Save superpowers04/c4ca6905c66363ad96cd64726848324d to your computer and use it in GitHub Desktop.
Save superpowers04/c4ca6905c66363ad96cd64726848324d to your computer and use it in GitHub Desktop.
Figura Unofficial Changelog Compilation

Releas 0.0.8 Changelog:

This is a unofficial changelog of Figura's 0.0.8 updates. All of this is compiled from the Official Figura Discord Figura is a mod for Minecraft: Java Edition that adds support for custom models using Block Bench projects, Lua scripts and json files. You can find more information on their Github page

for 0.0.7's changelog, click here

0.0.8 RC 5 Download:

1.16 - Isn't supported on 0.0.8

1.17

1.18

MOST OF THE NEW API THINGS AS OF RC 5

This is currently not written out yet

Changelogs:

Note this is currently just copy and pastes with no formatting changes

0.0.8 pre 1

Blockbench Animations [wip]

  • added support for blockbench animations
  • animations are extremely WIP and likely to be changed
  • this is just an preview of what is coming out there
  • they are loaded directly from your avatar
  • since animations does not increases complexity or script instructions, it is locked behind a trust setting
  • default off (for untrusted or less)
  • added an api for controlling animations

Animation API

  • accessed by using "animation.", and it has:
  • get(string) - returns an animation table of the respective name, or nil if no animation is found
  • listAnimations() - returns a table of strings with all animations you have
  • stopAll() - stops all currently playing animations

Animation Table

  • the animation table has:
  • play()
  • pause()
  • stop() - tip, if you want to restart your animation just call .stop() then .play()
  • isPlaying()
  • setLength() - setting this to a value below the original length will cause the animation to terminate before it completes
  • getLength() - returns the animation length (in seconds)
  • setSpeed() - sets the animation speed, eg: 2 means double the speed
  • getSpeed() - returns the animation speed (1 = 100%)
  • setLoopMode() - sets the animation loop mode, which are: "HOLD" (pauses on last frame), "LOOP" (it loops..), "ONCE" (stops after the last frame)
  • getLoopMode() - returns the animation loop mode

Renderer API [!]

  • moved render tasks (item / block / text) from renderer API to the custom model API
  • removed limitation to use only during the render function
  • now its only needed to be added once
  • also changed the syntax

→ eg (also applies to block and text render tasks): renderer.renderItem("iron_axe", model.part, "THIRD_PERSON_LEFT_HAND") → is now: model.part.addRenderTask("ITEM", "Task Name :3", "iron_axe", "THIRD_PERSON_LEFT_HAND")

  • which is: (type, task name, the item or block or text, (if its item) render mode, emissive, pos, rot, scale, custom render layer) → types can be either: "ITEM" or "BLOCK" or "TEXT" → render modes: "NONE", "THIRD_PERSON_LEFT_HAND", "THIRD_PERSON_RIGHT_HAND", "FIRST_PERSON_LEFT_HAND", "FIRST_PERSON_RIGHT_HAND", "HEAD", "GUI", "GROUND", "FIXED"

  • renderer.raycastEntities() now returns the exact hit position, like raycastBlocks does

  • after calling "raycastResult = renderer.raycastEntities(...args...)", you can now check "raycastResult.entity" to get the entity table, or "raycastResult.pos" to get the exact decimal position your ray touched the hitbox

Custom Model API [!]

  • removed indexing of children due to critial memory issues

  • added getChildren() - returns a table containing this part children tables

  • added addRenderTask() - (described above)

  • added getRenderTask(name) - returns a render task table of the given name, if any

  • added removeRenderTask(name) - removes a render task from this part

  • added clearAllRenderTasks() - remove ALL render tasks from this part

Render Task Table

  • function table used for changing render tasks data, which contains:
  • setText(text) - only for text tasks
  • setItem(item) - only for item tasks
  • setBlock(block) - only for block tasks
  • setItemMode(mode) - only item tasks, modes described above
  • setRenderLayer(custom render layer) - only when it is NOT a text task
  • setEmissive(boolean)
  • set/getPos()
  • set/getRot()
  • set/getScale()

PlayerEntity API

  • added getModelType() which returns "slim" for alex-type players and "default" for steve-type players

ItemStack API

  • added getName() - returns the item name
  • added getMaxCount() - returns how much this item can be stackable
  • added getRarity() - returns the item's rarity
  • added isEnchantable()
  • added getMaxDamage() - the max durability of the item
  • added isDamageable()
  • added isStackable()
  • added getRepairCost() - used for anvil exp calculations
  • added getMaxUseTime() - returns the time in ticks that youre going to spend using the item before it consumes/activate
  • added toStackString() - returns this item id and nbt formatted the same way as vanilla commands

Meta API

  • added getCanUseBBAnimations() - returns the value of animations trust setting

Extra

  • setting to toggle custom player heads
  • the figura button now changes its icon when theres a notification
  • added complexity counter to the debug menu
  • log() now have an optional second boolean argument, setting it to true will try to encode the log into json text, default false, no json text
  • hud parts are now rendered after the vanilla gui
  • removed the entity batching fix setting
  • changing trust settings of avatars now reloads them

Fixes

  • fixed script breaking when it is too large
  • fixed toStateString, from blockstate api, returning weirdly formatted string
  • fixed rendering not respecting complexity limits sometimes
  • fixed script instructions limiting not being applied if the user is blocked
  • fixed script instructions limiting being incorrectly calculated
  • fixed panic mode not stopping some areas of the mod
  • fixed setUniform doing nothing if you call it outside render()
  • fixed crash if you made a custom uniform with a space in the name, or used an invalid uniform type
  • fixed an issue with dynamic fps mod
  • fixed post-action-wheel-render scaling issues
  • fixed concurrent modification exception with sounds api .getSounds()
  • fixed massive FPS drop

Known Issues

  • animations timeline is processed on tick, limiting keyframes to 20 per second
  • keyframes interpolation mode are always linear
  • animations with negative speed have a funny (broken) behaviour

0.0.8 pre 2

Animations

  • reworked animations system

  • added smooth and step interpolation types

  • added startOffset, blendWeight, startDelay, loopDelay properties

  • fixed animation position being added after the part rotation

  • fixed animations being calculated only once per tick

  • fixed animations keyframes interpolation calculating wrong transformation data

  • fixed loop animations stuttering

  • fixed inverted animations having wrong keyframe order

  • fixed scale being addictive instead of multiplicative

Animation API

  • play() now resets the animation if its already playing, or resumes if its paused
  • added get/setStartOffset(number) - time to skip when playing the animation
  • added get/setBlendWeight(number) - a multiplier for the keyframe values
  • added get/setStartDelay(number) - time to wait before playing the animation
  • added get/setLoopDelay(number) - time to wait before looping the animation

World API

  • changed behaviour of getFiguraPlayers() → now it returns a table of players that have a script → each player has a table with their stored values (storeValue(key, value))

Global

  • removed setPlayerTargeting() since it is now unused

Fixes

  • fixed a crash with recursive render tasks (rendering head that contains a head)
  • fixed a crash when rendering enchanted items with custom render layers
  • fixed the game opening if the player has optifine installed
  • fixed wrongly world render instructions count
  • fixed debug hud showing complexity even if player has no avatar
  • fixed blockbench deserializer breaking the model if animations have not-numbers data

0.0.8 pre 3

Animation API [!!!]

  • animations can now be accessed through the animation table
  • replaces animation.get("name")
  • example: animation.cool_animation_name.play()

Data API

  • added allowTracking(boolean) - sets your player-tracking preference (default TRUE)
  • added hasTracking() - returns if you can be tracked or not

Entity API

  • added hasAvatar() - returns true if the entity has an avatar

World API [!!!]

  • removed getFiguraPlayers()
  • re-added getPlayers() - returns a player table of each player in your rendering range, except for players without tracking
  • ↑ due to some controversial changes (im based)

Fixes

  • fixed a bug where the old instance of the script would error when you hotswap your avatar containing the get() function from animation api
  • fixed incorrect new version notification for full releases update channel
  • fixed Custom Elytra Model having the x pivot at the wrong place [!]
  • fixed Shoulder Parrots model different than blockbench [!]
  • fixed Elytra Model (not custom) transformations being inverted from blockbench [!]
  • fixed RIGHT_ELYTRA_ORIGIN keyword not working as expected (please reupload your model for it to take effect)
  • fixed the game still opening when optifine is installed
  • fixed invisible parts from blockbench not being loaded by figura

0.0.8 pre 4

Fixes

  • fixed custom sounds not loading properly -> re-uploading avatar should fix it now
  • fixed custom sounds volume and pitch being an required argument

0.0.8 pre 5

CustomModelPart API

  • added getAnimPos(), getAnimRot() and getAnimScale() - returns the transformations set from the animations (only accessible if the part is a group)
  • getChildren() is also only for group parts now

RenderTasks API

  • text now supports new lines
  • for text tasks, added setLineSpacing() - changes the space in between lines
  • some functions are now only accessible in their corresponding tasks → setText() - text tasks → setBlock() - block tasks → setItemMode() and setItem() - item tasks → setRenderLayer() - block and item tasks

Fixes

  • fixed player.getTargetedEntity() returning an empty table
  • fixed an issue with the formatting of large scripts
  • fixed logTableContent() not throwing errors
  • fixed animations not working on special parts
  • fixed HUD parts being incorrectly scaled on the screen

0.0.8 pre 6

Client API

  • added getMousePos() - returns a vector-2 of the xy, screen relative, of your mouse

  • added getScaledWindowSize() - returns the window size based on the gui scale

  • added getScaleFactor() - similar to getGUIScale, but doesnt freak out when your window is different than the desired (setting) value

  • added setMouseUnlocked() - allows you to unlock and lock the mouse while in-game

  • added title functions, similar to "/title" command → get/setTitle(text) - get/sets the title on your hud → get/setSubtitle(text) - get/sets the subtitle on your hud → get/setActionbar(text) - get/sets the actionbar text (eg: bed is too far away / height limit) on your hud → setTitleTimes(fadeIn, stay, fadeOut) - title properties → clearTitle() - clear the current title displaying

Renderer API

  • added getCameraRot() - returnsa vector-3 of the camera rotation

Blockstate API

  • added getEntityData() - returns a table of the block entity data that you client have (skull owner / banner patterns / etc)
  • toStateString now also returns the block entity data

Global

  • added a setting to log incoming PINGS from you and other people (default OFF)
  • tweaked a bit the log of table contents

Fixes

  • fixed animations blend weight with catmullrom (smooth anims)
  • fixed pings and custom sounds sometimes erroring an old instance of your script
  • fixed first person model api having it transformations on the hand-space instead of gui-space
  • fixed an exploit with the data api
  • fixed an issue with loading of parts with a missing texture in blockbench

0.0.8 pre 7

Animation API [!]

  • added animation start/end blending

  • removed isPlaying() since its now redundant

  • added getPlayState() - returns a string of the current playstate

  • added get/setBlendTime(number) - sets the blending time (in seconds) while starting/ending animations

  • playstates: → "STOPPED" - not playing → "PLAYING" - is playing → "PAUSED" - don't increase or decrease time → "ENDED" - hold on last frame → "STOPPING" - blend from last keyframe to default → "STARTING" - blend from previous animation to first keyframe

Action Wheel [!]

  • reworked how to use action wheel
  • added an option to choose to execute only on mouse input or also when closing (old behaviour)
  • clicking does not reset anymore your mouse to the middle of the screen
  • only left click is allowed, so right click and others are ignored

Vector API [!]

  • moved "vectors.asTable()" to ".asTable()"
  • added rotateAroundAxis(vector, axis, angle) - return (vector) after it's been rotated around (axis) by (angle) degrees
  • added axisAngleToEuler(axis, angle) - returns an {x, y, z} Euler angles representation of the rotation around (axis) by (angle) degrees

Client API

  • added getIrisShadersEnabled() - return a boolean if you have an active iris shaders or not

Custom Model API

  • creating render tasks now also returns the created render task table, on the same function

Pings

  • added the size of the pings together with the log
  • only works for incoming non-local pings

Fixes

  • fixed an crash while attempting to load avatar from a null uuid
  • fixed logs of vector pings
  • fixed setSubtitle, setTitle and setActionbar from the client API executing for non-host scripts
  • fixed unable to send vectors with pings
  • fixed pings not showing on the debug screen if you have no avatar or your avatar doesnt have a script
  • fixed avatar name not showing "..." when trimmed on the preview screen
  • fixed an crash while attempting to load the preview screen without an player
  • fixed an crash while oppening the trust screen while not in a server (both dedicated and integrated)
  • fixed pings log not using the accent color properly
  • fixed errors while attempting to send a function with pings (this doesnt allow you to send functions)
  • fixed renderer api, getCameraRot(), returning NaN sometimes
  • fixed zip avatars not loading custom sounds properly
  • fixed (again) setUV from custom model api, floating point imprecision
  • fixed setEnabled, setExtraTexEnabled and setCullEnabled from custom model api returning null instead of nil
  • fixed incompatibility with extra origins
  • fixed mouse resetting to the middle of the screen with client.setMouseUnlocked and action wheel
  • fixed log spam when Iris shaders are enabled
  • fixed entity.getVelocity() not being synced across clients
  • fixed crash while creating render tasks
  • fixed custom render layers not working with HUD parts
  • fixed fire overlay rendering in first person even if disabled on the script
  • fixed some performance issues while rendering models

0.0.8 pre 8

Animation API

  • readded isPlaying() - which is the same as checking if the playState is PLAYING or STARTING or STOPPING
  • added cease() - forces an animation to stop, without the blending

Keybind API

  • custom keybinds only, added reset() which resets the timer for wasPressed()

Badges

  • added the Info Badge for when the avatar is below its required trust settings
  • under complexity now shows the info badge instead of error badge
  • the red badge still shows if your script errors or overrun resource limits

Avatars

  • now you can load compressed (.moon) files
  • added ability to resource packs to provide avatars, they must be located in "assets/figura/avatars/" and must use the compressed format

Preview Screen

  • added "Cache Avatar" button which saves an compressed, packed, copy of your avatar, in your avatar folder
  • added "Save Avatar" button which saves the avatar youre current wearing as an editable blockbench file, however it doesnt save blockbench animations yet

Fixes

  • fixed custom shaders not registering if the avatar has trust for custom shaders disabled

0.0.8 rc 1

Entity API

  • added isSprinting()
  • added getEyeY() - returns the world pos of the entity eye Y coordinate
  • added isGlowing()
  • added isInvisible()
  • added isSilent()
  • renamed isGrounded() to isOnGround() for vanilla nbt tag parity
  • added isSneaky() - from living entity api
  • added isSneaking()

Living Entity API

  • added isClimbing()
  • moved isSneaky() to entity api

Player Entity API

  • added getGamemode()
  • added isFlying() - creative flight

Animation API

  • added ceaseAll() - same as individual cease()
  • stopAll() now does the same as individual stop()
  • stop() now doesnt replay the animation's ending blend
  • added setPlayState("playstate") - manually sets the playstate of the animation

Fixes

  • (from pre-release 7) fixed scripting encoding, now you can use ยง and other unicode characters
  • fixed animations rotations, again
  • fixed some action wheel pixel inconsistency
  • fixed script minifier not respecting shebang

0.0.8 rc 2

Trust Settings

  • replaced the toggle for blockbench animations with a complexity slider

  • each keyframe is one complexity

  • defaults are: untrusted -> 32; trusted -> 96

  • tweaked a bit the min/max slider values of all settings

Debug HUD

  • added animations complexity

Sound Screen

  • added a new screen, found in the preview menu
  • it shows all custom sounds loaded by your current avatar
  • you can preview/stop them there
  • preview uses pitch and volume of 1

Animation API

  • added start() - plays only if the animation is not being played
  • replacement for this ↓ if not anim.isPlaying() then anim.play() end

Client API

  • added checkVersion(version1, version2)
  • it checks if the version1 is less, equals or greather than the version2
  • returns -1, 0 or 1 respectively

Custom Model API

  • added get/setLight({block, sky})

  • overides the light of the part

  • requires a vec2f of block and sky light

  • values range from 0 to 15

  • any value outside this range renders the part invisible

  • added get/setOverlay({white, hurt})

  • overides the overlay of the part

  • requires a vec2f of white and hurt overlay

  • values range from 0 to 15

  • any value outside this range renders the part pitch black

Meta API

  • replaced getCanUseBBAnimations() with getAnimationLimit()

Renderer API

  • added swingArm(boolean offhand) - swings your arm, like when punching or interacting

Fixes

  • fixed avatar serializer not parsing blockbench animations
  • fixed avatar serializer not parsing hidden parts properly

0.0.8 rc 3

Meta API

  • Added getCurrentAnimationCount() - returns a number of the current animation complexity - forgor :p

Client API ~

  • Added getMouseScroll() - returns a number of the current vertical mouse scroll

Animation API ~

  • Changed .stop() - now it acts like start(), not restarting the stop blending animation if the playstate is already "stopping"

ALL APIs ~

  • Removed the read-only lock - now you can modify the APIs provided by figura

Badges ~

  • Awarded devnull the Dev/VIP badge

Fixes ~

  • Fixed the game freezing when attempting to re-auth with the backend

0.0.8 rc 4

Meta API ~

  • Added getCurrentAnimationCount() - returns a number of the current animation complexity - forgor :p

Client API ~

  • Added getMouseScroll() - returns a number of the current vertical mouse scroll

Animation API ~

  • Changed .stop() - now it acts like start(), not restarting the stop blending animation if the playstate is already "stopping"

ALL APIs ~

  • Removed the read-only lock - now you can modify the APIs provided by figura

Badges ~

  • Awarded devnull the Dev/VIP badge

Fixes ~

  • Fixed the game freezing when attempting to re-auth with the backend

0.0.8 rc 5

Preview Screen ~

  • Changed the tooltip of status indicators - go check them out :3

Badges ~

  • Tweaked donator, burned and dev badges

Fixes ~

  • Fixed an memory issue from entities trying to load avatars
  • Fixed an issue about entities trying to get data from backend, causing unnecessary backend loading
@GNamimates
Copy link

you are AWESOME

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment