Releases: Kingdom-of-The-Moon/FiguraRewriteRewrite
Release list
0.1.1
Changelog
Figura Model Parts
- added delta and context arguments for model parts render events
Chat Receive Message Event
- can now return false to supress the message
- can now return a second argument, which will change the message background colour on chat (RGB only)
Client API
- added uuidToIntArray
- added getCameraEntity
- added getTranslatedString
Entity API
- added isLiving
- added isPlayer
Host API
- added setSlot
- added getPickBlock
- added getPickEntity
- added isChatVerified
- added getScreenSlotCount
- added getScreenSlot
- getChatMessage now also includes the message background color
- setChatMessage can now changes the message background colour
Vectors API
- added angleToDir
Renderer API
- added get/setCameraMatrix
- added get/setCameraNormal
- added get/setUpsideDown
World API
- added getBuildHeight
- added getSpawnPoint
Blockstate API
- added isAir
Sound API
- added getCustomSounds
Particles API
- refactored getters to actually get the particle values instead of only the values set by scripting
Avatar API
- added getNBT
Render Tasks
- added remove
Text Render Task
- reworked rendering to match the vanilla display text behaviour
UI
- updated clarity of the text in avatar wizard player model
- added a setting to render fps text on figura guis
- added non-available tooltip for avatar settings
- removed reddit links
- changed UI rainbow
Commands
- figura commands can now only be sent through a signed context, meaning tellraw nor any other type of executing commands do not allow for running figura commands anymore
- merged export_texture and export_docs into a new export command
- added export command wh ocan export a texture, docs or an avatar (compressed) file
Permissions
- added default avatar permissions from the backend
Other
- added immediatelyfast in the conflicts list
- added a new easter egg
Fixes
- fixed AST minifier breaking some scripts
- fixed backend chat messages not parsing json text
- fixed notes text on piano widget from the sounds panel having shadows
- fixed a concurrent issue with keybinds
- fixed a concurrent issue with sounds
- fixed error description of reading pings not including the source (owner)
- fixed lua error messages not including the errored line
- fixed loading order of cube faces having unsorted order
- fixed an issue when reading malformed animations
- fixed status widget for other players showing warnings for avatar sizes based on the client limits
- fixed leftover vec5-6 code from vectors
- fixed nameplate customizations not applying properly on chat
- fixed nameplate not applying customizations on unmatched-case names on chat
- fixed avatars being able to cancel panic mode keybind
- fixed render layer parts reusing the last saved matrices after its parent parts are hidden
- fixed custom permissions not saving for local player
- fixed avatar playing sound badge flickering when playing < 1s sounds
- fixed sounds playing even if their volume is zero
- fixed action wheel hover text new lines having invalid characters if newline isnt supported
- fixed a crash with action wheel scroll actions
- fixed metadata parser not allowing for customization of the models root
- fixed metadata parser not allowing to index parts from "models" root
- fixed texture api from vanilla not accepting atlas textures
- fixed rendering of upsideDown portraits
- fixed a vanilla crash when rendering entities
- fixed FPS issues with expanded folders in the wardrobe avatar list
- fixed loading error widget flashing visible when opening the wardrobe menu
- fixed blockbench model loading allowing for duplicate textures
- fixed view bobbing affecting model matrix
- fixed wardrobe list being very laggy
- fixed wardrobe list scrollbar misbehaving with zip avatars
- fixed unable to use avatar when authed in a cracked server
- fixed a concurrency crash when rendering children model parts
- fixed main_dir config not reloading the files from the new source
0.1.0
Changelog
UI
- updated pause menu icon to be more compatible with resource packs
- added icons on the panels selection
- added the help screen
- changed the wiki link
- added drag and drop files (copy operation) to the wardrobe screen
- added a custom confirmation screen for UI links
- context menu can now be closed when pressing escape
- added more colours in the colour enum
- added tooltips for context menu entries
- added parallax animation to the background
- tweaked the text only figura button in the pause screen
- pet the cat
- replaced text fields with a search bar (when appropriate)
- added tooltip for config enums
- added tooltip for advanced permission entries
- added tooltip for the current selected permission category
- added more useful links in the modmenu entrypoint
- added emoji suggestions on chat
- added search bar to the settings
- labels now fade in when hovered (if contains alpha)
- labels now apply click event style to all matching styles in the text
- added an update download link on the version label
- renamed "backend" to "cloud"
- updated loading badge
- avatar upload/delete feedback is now always on
- emojis are now applied to item names
- the emoji category is now shown in the tooltip
- space now breaks the parsing of emojis
- added warning logs for invalid (custom) emoji names
- updated badges, pride badges, status widgets textures
Avatars
- added a badge for avatars who are playing sounds
- tweaked blockbench model error messages
- added new part customization, remove, that, as the name says, removes the part during loading
- added a new customization metadata field, "smooth", that calculates smooth normals for that part and its children
- added an optimization to grab avatars only for valid players
- changed allowed bbmodel types to "free" (generic) and custom types that includes the word "figura"
- models now respect the export option in blockbench
- files hidden or starting with "." are now ignored (previously was only folders)
- avatars can now be loaded from zip files (and also zip files inside zip files inside zip fi-...)
Permissions
- added new permission setting ANIMATION_INST
- custom skulls are now enabled on the default permission level
Rendering
- added textured glint render type
- signs now render emojis
- part rendering is now fully stopped when its visibility is false
- changed Iris vertex offset sweet number to -0.0005f (was -0.005f)
- improved avatar rendering performance
- improved performance of rendering nested special parts
Scripting
- set color and set scale now, when given only one value, will be copied to all three axis
- new minifier mode, AST (Abstract Syntax Tree)
- added a new host-only click event for json text, "figura_function", that runs a lua function
- sounds and particles now stops when the avatar script errors
Parent Types
- added Item parent type, for the new item renderer event
Animations
- code keyframes now allows for code chunks (returning a number) instead of only Lua expressions
Events
- added the ITEM_RENDER event
- chat received message event now allows for changing the message, by returning a json text
- the render event now have a third argument, the pose matrix used to render the avatar
- added a new event, on_play_sound, executed every time a sound is played
- getEvents() now returns an indexed table with the events name
- functions can now be removed by themselves instead of only names
- added char typed event
- added first/third person skull rener contexts
- added resource reload event
Action Wheel
- action wheel can now be controlled by the hotbar keys
- added 2 more modes for action wheel titles
Pings
- changed pings to be more size effective
Model Parts
- added preRender/midRender/postRender functions for modelparts
- added newPart()
Sound (object)
- sounds now have subtitles
Vectors
- added vec2 augmented()
Texture API
- added fromVanilla()
Texture (object)
- added getPath()
- added applyMatrix()
Avatar API
- added getEntityName()
Client API
- added getCameraDir()
- added listAtlases()
- added getAtlas()
- added getTabList()
- removed getVersionType()
- added getVersionName()
- added isSnapshot()
- added getClientBrand()
Host API
- removed saveTexture() since its now a command
- added get/setChatMessages()
Renderer API
- added get/setRenderLeftArm()
- added get/setRenderRightArm()
- added get/setEyeOffset()
- added get/setBlockOutlineColor()
Atlas API (new)
- contains, listSprites(), getSpriteUV(), getWidth(), getHeight()
Render Tasks
- renamed setEnabled() to setVisible()
Entity API
- added getControllingPassenger()
- added getControlledVehicle()
- added isCute()
Player API
- added getExhaustion()
- added getTeamInfo()
Blockstate API
- removed getMaterial()
ItemStack API
- added getBlockstate()
Settings
- default settings are not saved anymore
- backend connection toasts are now disabled by default
- changed Iris offset compatibility to include all render layers
- added a new config, CLEAR_AVATAR_DATA, that wipes all saved avatar settings
- removed "All Parts" pivot rendering options, since hidden children do not render anymore
- changed Iris emissive compatibility to off by default, since most shader packs renders emissives properly, making the setting used only rarely
- added an option to force smooth normals on all avatars
- added a new config, REDUCED_MOTION, that when on, removes all Figura's GUI animations and makes tooltips render in a static place, the setting excludes animations that have their own dedicated setting (gui background, text scroll)
- emojis are now on by default
- changed behaviour of LOG_PINGS setting to a host-only or global logging of pings
Commands
- renamed "setAvatar" debug command to "set_avatar"
- added "export_texture" command, takes a string, which is the path/id of the texture (same as the TextureAPI index)
- added more information about local paths in the debug command
- "sizes" section under the debug command are now sorted (descending) by the size
Entrypoints
- added entrypoints for custom panels and modded vanilla parts
- added entrypoint for figura docs
- changed LuaJ dependencies to kotm
Fixes
- fixed duplicate doc entries
- fixed description in the avatar widget not respecting spacing
- fixed block pos from vec3 being rounded instead of floored
- fixed piano hovered render in the avatar sounds screen
- fixed avatar loading sometimes using variables from other loading instances
- fixed portrait rendering
- fixed expanded permissions text
- fixed precise mode button text
- fixed double outline for the selected avatar in the avatar list
- fixed player list background in the permission panel
- fixed the mod icon being 1px off
- fixed hold on last frame animation time
- fixed skull parts being unable to use render tasks
- fixed avatar loading not mirroring blockbench outliner visibility
- fixed animation instructions count
- fixed model parts using its rotation as pivot if the pivot is 0, 0, 0
- fixed text scroll sometimes being one pixel off
- fixed player names in the permission screen being able to have newlines
- fixed player badges in the permission screen being cut out with names too large
- fixed elytra pivot point
- fixed badges not showing up in the popup menu
- fixed avatar rendering layers out of order
- fixed GUI scale not affecting the panels background
- fixed some memory leaks
- fixed parts UV being broken with ignoredTextures
- fixed search bar in lists not resetting the scroll bar
- fixed avatar wizard creating files when an error happens
- fixed nameplate visibility ignoring permissions settings
- fixed avatar failing to load when failing to parse some enums
- fixed figura builtin resource pack being applied always on top
- fixed emojis being parsed after the player names in chat messages
- fixed focusing of some widgets
- fixed GUI parent rendering being weird
- fixed lag in the wardrobe menu by reloading the avatar list every second
- fixed keybinds not being saved in the config file
- fixed parsing of special chat messages, applying emojis, playernames and badges
- fixed spacing of folders in the wardrobe's avatar list
- fixed being unable to set some keybinds due to them firing while a keybind is being changed
- fixed the runtime resource pack being always on top instead of after the loader's mod resources
- fixed the player list being offset to the left when the scrollbar is not visible
- fixed paperdoll not rendering in the config menu when first person only is ON
- fixed rendering of textures split in half
- fixed a crash with sounds
- fixed events running out of order
- fixed some docs entries having missing/incorrect information
- fixed floating point issues with popup renderer
- fixed floating point issues with world parts
- fixed player api getModelType() returning different results
- fixed not equipping the avatar when uploading if backend toasts are disabled
- fixed load discrepancy with lua manual
- fixed context menu sub-menus not highlighting parent entry
- fixed nested context menus highlighting
- fixed nested context menus not rendering the arrow properly
- fixed permission menu portraits not rendering the avatar while dragging
- fixed FileAlreadyExists exception within the avatar wizard
- fixed crash when opening the permissions screen or the avatar wizard menu
- fixed hovering area for players and groups in the permission screen
- fixed broken height calculation for config widgets
- fixed settings cancel button flashing enabled when opening the config screen
- fixed EQUAL_DEPTH_TEST figura render types not working with iris offset compatibility
- fixed events sometimes returnin...
0.1.0 rc14
CHANGELOG
GUI
- improved code for nameplate customizations
- custom splash texts now have the figura mark
- some resources like translations and emojis are now backend provided, that means they can be updated without the need of updating the mod
- figura no long uses a custom framebuffer to render the GUI (for now...)
- updated all GUI textures
- you can now ctrl+tab to cycle through the panels
- the entity preview scale is now smooth
- updated status icons and badges textures
- improved usage of the empty space in the wardrobe panel
- added text scrolling for ui buttons
- changed entity widget to create a new instance of itself when toggling the expanded mode
- added a warning for keybind conflicts, similar to the vanilla warning
- tweaked focused logic for panels and containers (1.19.4 only)
- added a playable keyboard in the sound screen
- changed the panels selector design to be similar to the vanilla tabs
- the avatar list now have icons and descriptions
- unfinished panels are now hidden
- added favourite system to the avatar list (right click on the avatar)
- changed the version label in the wardrobe menu when an update is available
Config
- added the PAPERDOLL_INVISIBLE config, that when true, removes the invisibility effect from the player when rendering the paperdoll
- added NAMEPLATE_RENDER config, toggles the behaviour of when to render nameplates
- added the setting ACTION_WHEEL_SLOTS_INDICATOR, where it chooses where to render action wheel pages's slot offset text, in case of conflicts with action's titles, the titles have priority
- added PREVIEW_HEAD_ROTATION, toggles if the player head should rotate inside figura GUIs
- added host only pivot rendering debug in RENDER_DEBUG_PARTS_PIVOT
- added IRIS_COMPATIBILITY_FIX config, that aims changes the rendering code a bit for better compatibility with shaders
- added "rendering" category
- added two settings to control the text scrolling behaviour, TEXT_SCROLL_SPEED and TEXT_SCROLL_DELAY
- the paperdoll now renders when hovering its config category
- added a new config type, buttons, that just executes the action when clicked
- added the CLEAR_CACHE button config
- added REDOWNLOAD_ASSETS button config, which checks the backend for missing downloadable resources
- PREVIEW_NAMEPLATE is now off by default (so it matches vanilla)
Models
- added HUD parent type aliases - "HeadsUpDisplay", "Gui", "GUI" and "GraphicalUserInterface"
- avatar rendering is now sorted by render types
- added the EYES render type, so you can force the usage of that render type even with iris compatibility fixes
- added TEXTURED_PORTAL and SOLID render types
- improved error message for outdated blockbench version models
- optimized rendering to render special parts separated from the main model, that increases the performance astoundingly, however it comes with a cost, the customization of non special parent parts are not processed when rendering them - that means that "models.a:setPos()" wont change the pos of "models.a.World"
- added "Billboard" as alias to the Camera keyword
- fixed camera parts not scaling with its parents
- added BLURRY render type (translucent no cull with blur on)
- added "Arrow" parent type
Script
- added __pairs and __ipairs metamethod lookups
- all "set" methods, from all APIs, are now chainable
- changed __newindex to error when a not found key is given
- changed __index in API types (events, vanilla parts) to be case insensitive
- static APIs (world, vectors, client) now ignores the first argument if its the API itself (i.e. world:getTime())
- moved the aliases in docs from its own components, to be part of the function they were replacing
Trust System
- removed
Permissions System (new)
- a new system that controls avatars permissions
- very similar to the old trust system
- the default categories are: Blocked, Low, Default, High and Max
- in comparison with the old trust system, some default permissions have been increased / turned on
Emojis
- are no longer builtin into the mod, they are now downloaded from the backend
- you can now hover over emojis to see the text it had replaced
- removed being able to change the prefix and suffix of emojis
- you can escape emojis now with backslashes "\"
- now can be blacklisted from using in nameplates
Animations (globally)
- animations now parses lua expressions on its keyframe data
- added support to BEZIER interpolation type
- tweaked a bit the keyframe "delta" calculation
Pings
- invalid ping arguments are once again parsed as nil instead of throwing an error
- improved pings parsing of matrices
- strings now uses byte arrays instead of UTF8
Events
- added, in the skull render event, the entity source as parameter and the rendering source (mode/context) as string
- cancelling input events now works if the mouse is ungrabbed but no screen is opened
- CHAT_RECEIVE_MESSAGE now have a second argument, the json text (as string)
- added getRegisteredCount() - returns how many functions was registered in that event
- added ARROW_RENDER event - takes as arguments the delta tick and the arrow entity itself
Action Wheel API
- getPage() with nil values now returns all registered pages
- added getSelectedAction()
Action Wheel Pages
- added getTitle() - returns the page's title
- removed pages actions limit
- added offsets in pages
- adding actions over the index 8, will add them into "groups", their slot index is absolute yet based on modulo 8
- pages now render the current offset text
- scrolling in the action wheel, when theres no action with scroll events selected, will scroll between offsets
- action wheel events, when returned true, will now cancel action events and offset switching
- added a new field for pages, keepSlots, and its functions, shouldKeepSlots() and setKeepSlots(), to toggle if the slot offset should be reset when changing pages
- added action() - returns one of the registered actions
- added getSlotsShift(), setSlotsShift(), getActions()
Keybind API
- added getKeybinds() - returns a list of all keybinds
Keybinds
- renamed the function hasGUI() to isGuiEnabled()
- added the modifiers bitmask argument for the keybinds press/release functions
- added getID()
Avatar Texures
- added copy() - returns a copy of the texture
Animations (object)
- added isPlaying(), isPaused(), isStopped()
Vertex (new)
- an object that holds information about a point
- have "pos", "uv" and "normal"
Vanilla Model
- added get/setPos(), get/setRot(), get/setOffsetRot(), get/setScale(), get/setOffsetScale()
- hiding the held items wont show up the player arms anymore
Figura Model Parts
- added get/setOffsetScale()
- added getTruePos(), getTrueRot(), getTrueScale(), getTruePivot() - returns a sum of all variables that affects that transform
- added get/setPrimaryColor(), get/setSecondaryColor() - changes the colours per render types
- changed setColor() to changes both primary and secondary colours at once
- changed getColor() to return an average of both colours
- groups can now setUVPixels() (as long their children have the same texture size in all faces)
- added getVertices() - returns the vertices used by a texture
- added getAllVertices() - returns all the vertices used by all of this part's textures
- added moveTo(), addChild(), removeChild() and copy()
Vectors
- vec3 augmented() now allows for setting the vec4 w value
Config API
- added getName() - returns the target file's name
- strings now uses byte arrays (and thus saved in base64) instead of UTF8
Client API
- added getFrameTime() - returns the render "delta", without need of the render event
- added isModLoaded() - checks if the given modID is loaded
- added getTextDimensions() - returns a vec2 of the text max width and height
Host API
- added getReachDistance()
- added isFlying() (from the player api)
- added getAir() (from the entity api)
World API
- added getBlocks() - rturns the blocks in the specified area
Renderer API
- added shadowRadius(), cameraPos(), cameraPivot(), cameraRot(), postEffect(), fov(), crosshairOffset()
- added renderHUD
- added get/setOutlineColor()
- added setPrimaryFireTexture() and setSecondaryFireTexture() - allows you to change the avatar's on-fire texture
Sound API
- added isPresent() - checks if the sound exists
- sounds do not error anymore when indexing an invalid ID
Particle API
- added isPresent() - checks if the particle exists
Nameplate API
- nameplates on chat and tablist are now trimmed (no tailing whitespaces)
CHAT Nameplate
- improved chat nameplates
- removed badges for the non-sender names (sender is defined as the first player name found in the message)
- parsing of chat message nameplates is now case insensitive
ENTITY Nameplate
- added get/setPivot()
- setPos() now doesnt move the pivot anymore
- added getBackgroundColor()
- setBackgroundColor() now doesnt allow for a vec3 and alpha separately
Render Tasks
- added getName()
- added getPositionMatrix(), getPositionMatrixRaw()
- added getNormalMatrix(), getNormalMatrixRaw()
- added setMatrix()
Item Render Task
- renamed ITEM_RENDER_TYPE to ITEM_DISPLAY_MODE
- renamed item tasks, get/setRenderType() to get/setDisplayMode()
Text Render Task
- added getText() - returns the raw string of this text task
- removed setCentered() and setRight()
- added setAlignment() - takes a string, "LEFT", "RIGHT", "CENTER"
- added setWidth() - trims the text into that max width, wrapping into new lines
- added seeThrough() - makes the text visible behind walls
- added setBackground() - makes the text render with a background (like nameplates)
- added setBackgroundColor() - changes the background color
- added setWrap() - cha...
Beta 0.1.0 Release Candidate 13
Changelog
Profiler
- implemented the vanilla profiler alongside figura functions (debug pie)
- enable with SHIFT + F3
- you can now check out the performance inpact of every figura action
Avatar Wizard
- added the avatar wizard
- accessible from the avatar list in the wardrobe menu
- allows you to quickly create a dummy avatar by pressing some switches
- features a default player model, with cape and elytra parts, and also pivot parts
- can also create a script that hides parts of the player model
UI
- changed avatar list
removed the unselect avatar
added three buttons below the search bar
new avatar; unselect avatar; open avatars folder
- fixed tooltips in the left side of the cursor being slightly offset in comparison with the right side
- disabled config entries now have their name grayed out
- updated ingame docs text
Loading
- added a minimal required blockbench version
- added required model format
- loading errors are now displayed on the wardbore screen, next to the status widget
hovering it shows details about the error
Metadata
- setting the render type now allows for allows for lowercase values
Models
- Cape parts now doesnt move out if the chestplate_body is disabled from the vanilla model api
Script
- script loading now have varargs of the path and name of the current file
- require fallback function now have the script name as argument
- made all APIs consistent
the idea is that all functions have a "set" and a function-chain way of calling it
for example, "setPos()" and "pos()"
Textures
- removed support for blockbench "emissive" texture type, now all emissive textures must have the _e suffix
- internally changed how textures are stored in avatars
- figura will now also parse _s (specular) and _n (normal) textures, however support for it is not fully implemented yet
Badges
- changed the order that SYSTEM badges are applied
- added a new badge to indicate that an avatar is having a sort of trust issue, were when hovering, it shows a description of what caused the issue
- the error badge now will also show the error message when hovered
Pings
- pings will now throw an error if an invalid type is given
Events
- added MOUSE_PRESS event, which runs when pressing the mouse buttons
- added KEY_PRESS event, which runs when pressing the keyboard buttons
- mouse and keyboard events now can only be cancelled if theres no active screen to prevent softlocks
- changed mouse move event to take the changed position instead of the current position
Avatar (Meta) API
- added getTrustLevel()
- added getMaxTextureSize()
- added canHaveCustomHeads()
- added getUUID()
Animation API
- added animation API
- takes the previous "animations" global field
- contains the functions: getAnimations(), getPlaying(), stopAll()
- to access an animation, you can still index it through the API
Action Wheel
- now accepts emojis in texts
Model Parts
- now respects the visibility of their (vanilla) parent models
that should add compatibility with mods that depends on this function
- setTexture now allows for "SPECULAR" and "NORMAL" types
Vanilla Models
- get/setVisible() now allows for nil values, were true/false forces the part to render/not render, and nil uses the vanilla behaviour
Keybind API
- newKeybind now allows for nil keys, resulting in the unkown (unbinded) key
- added "of()" as an alias for "newKeybind()"
- added "fromVanilla(id)" which returns a keybind from the vanilla key id
Keybinds
- "onPress" and "onRelease" fields got renamed to "press" and "release", the old name is now used for functions
- "enabled" and "gui" fields got replaced by functions
Client API
- added getDate()
Host API
- appendChatHistory() now doesnt require the CHAT_MESSAGES settings anymore
- added isAvatarUploaded()
- added getStatusEffects()
- added set/getClipboard()
- added getAttackCharge()
- added isJumping()
Renderer API
- added get/setCrosshairOffset()
Nameplates
- added a "${name}" variable in the nameplate text, that similary to the badges, it is replaced with the player name
Entity Nameplate
- added get/setOutlineColor()
- added get/setLight()
- the fields "visible", "shadow" and "outline" got replaced by functions
World API
- added getDimension()
Entity API
- added isAlive()
- added getPermissionLevel()
- added isCrouching()
Living Entity API
- added getAbsorptionAmount()
- added isSensitiveToWater()
- added getEntityCategory()
- removed getStatusEffects()
- added isGliding()
- added isBlocking()
- added isVisuallySwimming()
- added riptideSpinning()
Player API
- added isFishing()
- added getChargedAttackDelay()
Resources
- added two new ui textures
new_avatar and unselect
- added template textures for the avatar wizard
Fixes
- fixed the parser for legacy formatting in text producing wrong output
- fixed an inaccuracy error when using setUV with really big numbers
- fixed a rare crash when selecting an avatar
- fixed being unable to use the pride badges in the nameplate
- fixed incompatibility with mods like FirstPersonModel and BetterCombat
- fixed cape while riding entities
- fixed an exploit of being able to remove the badges
- fixed entity nameplate with outline rendering always at fullbright
- fixed subpanels screens keeping you stuck inside the gui if you exited them by clicking on the parent panel
- fixed require not calling the fallback function
- fixed tick/render event running even if the entity is unloaded
- fixed obfuscation working on the badges
- fixed item textures being slight offseted from item textures in the action wheel
- fixed (hopefully) a crash with camera utils
Beta 0.1.0 Release Candidate 12
Changelog
UI
- tweaked how the docs are shown in game
- the wardrobe avatar list now allows searching for the avatar file names
Emojis
- added special emojis
- they can be used alongside the nameplate and within chat messages
- by default the setting for parsing emojis in chat messages is off
- to use them you have to type ":emoji_name:" _
- have fun discovering them all :3
Settings
- added the misc setting, Default Trust Level, (default Untrusted), which changes the default trust level that new players are added when loaded
- added the ui setting, Wardrobe File Names, (default OFF), which toggles the avatar list in the wardrobe menu to use the file names instead of the metadata names
- added the dev setting, First Person Matrices, (default ON) which toggles if the avatar should update its matrices while in first person
- added the misc setting, Chat Emojis, (default OFF) which toggles emoji parsing for chat messages
- added the misc setting, Wardrobe Button, (default unbinded), which on press, opens the figura wardrobe screen
Avatar
- added a new metadata field, ignoredTextures, which takes an array of strings with textures to be ignored (removed) when loading the avatar
- folder names and model names are now considerated for parent parts
Rendering
- avatar matrices are now updated even while in first person
- world parts and its children now have their light calculated based on their pivot point
- reworked how cape and elytra are rendered
Scripting
- "require" now allows for a second argument, which is a function that will be called when the target script doesn't exist, instead of throwing an error
Events
- added a new event, MOUSE_MOVE, which runs every time the mouse is moved around _
takes two parameters, x and y, which is the position of the mouse
the position is not scaled by the GUI
- MOUSE_MOVE and MOUSE_SCROLL can now return "true" to block the vanilla mouse function
- added a third argument to the SKULL_RENDER event, which is the item instance from the rendering source _
- changed the second argument from the SKULL_RENDER event from the block pos to a block instance from the rendering source _
Animations API
- override is once again applied per channel only
- renamed addCode() to newCode()
- added the function setPlaying(bool), which is an alias for both play() and stop() merged together
Texture API
- renamed register() to newTexture()
Action Wheel API
- renamed createAction() and createPage() to newAction() and newPage()
Action Wheel Page
- setAction() index, now when given -1, will append the action to the latest avaiable slot in the current page
Keybind API
- changed its global field to "keybinds"
- renamed create() to newKeybind()
Particle API
- renamed addParticle() to newParticle()
Sound API
- renamed addSound() to newSound()
Figura Model Part
- renamed addText(), addItem() and addBlock() to newText(), newItem() and newBlock()
- added setOverlay() and getOverlay(), where similar to setLight, it changes the white overlay (used in tnt, creepers) and the damage overlay from the part
Render Tasks
- removed emissive() and isEmissive()
- added light() and getLight(), overlay() and getOverlay(), where both behaves like the model part functions
Player API
- added hasCape(), which checks if the player has a cape loaded
- added hasSkin(), which checks if the player has a custom skin loaded
Client API
- added getServerData(), which returns a table with some information about the current server (ip, name, and motd)
Render API
- added setFOV() and getFOV(), which changes the current fov multiplier
Assets
- the font figura:default was removed and split away into the figura:ui (used for... ui), figura:badges and figura:emojis
- moved unused badges from badges.png to emojis.png
- emojis can be added, removed or changed by editing the emojis.json file
quick remind it will try to use the figura:emojis font, so better set up on it too
Fixes
- fixed mod's version build metadata not semver compliant
- fixed client:compareVersions() having a wrong error message
- fixed a StackOverflow crash with pings
- fixed a StackOverflow crash with the figura run command
- fixed the player name in the popup menu being slight offset in certain circumstances
- fixed the upload button texture being one pixel off
- fixed avatar list in the wardrobe menu not updating avatar name changes
- fixed a ConcurrentModification crash while loading avatars
- fixed the nameplate ALL group not accepting nil values in the setText function
- fixed avatar matrices not updating while in first person
- fixed world parts using the player light for rendering
- fixed an exploit that allowed to remove the badges from the nameplate
- fixed a crash with player names with special characters
- fixed config:save() keeping invalid values accessible between loads
- fixed the client sending backend requests for invalid players (non UUID v4)
- fixed SKULL_RENDER event sometimes having data from the previous (including other avatars) events _
- fixed Cape parent parts not working properly when the paperdoll is open
- fixed Elytra parent parts not working properly when theres other avatars with elytra
- fixed custom model part, setMatrix(), being cleared while in first person
Beta 0.1.0 Release Candidate 11
Changelog
Avatars
- backend avatars are now cached on disk after downloading from the backend
- after 7 days they are invalidated and will be downloaded again
UI
- the paperdoll now will render all spectating LivingEntities instead of only Players
- the expanded model widget now will also hide the panels on top
- the authors tab in the avatar info widget now respect multilines
each line now have their own tooltip in case of text too large
in case of too many lines, the last visible line will be replaced with elipsis with a tooltip with all lines
- removed build metadata from the mod version in the wardrobe screen
Action Wheel API
- added "texture", "hoverTexture" and "toggleTexture" - similar to how the item functions works
allows the usage of custom textures within the action wheel actions
takes a texture object, and optionally: u, v, width, height and scale
all fields are calculated in pixels only
default UV is 0, 0, whereas the default width and height is the texture dimensions, the default scale is 1
the texture will always be centered in the slot
World API
- removed "playerVars"
- added "avatarVars" - similar to old playerVars, however instead of the keys being playernames it uses UUIDs now. It also include vars of offline players where their avatar are still loaded
Host API
- removed "getTargetedEntity"
Texture API
- "read" now also allows for byte array data
Entity API
- "getTargetedBlock" now returns a varargs of the block, the position of the raycast colision, and which direction of the block youre facing, or all nil if nothing was hit
- added "getTargetedEntity" - similar to getTargetedBlock, return a varargs of the entity, and the position where the raycast colided, or all nil if nothing was hit. Minimum distance check is 0, while max is 20
Figura Model Parts
- added "isChildOf" - checks if this part is a child of the given part
- setPrimaryTexture (and secondary) do not allow for custom texture names anymore, now it MUST be the texture object
Bug Fixes
- Fixed backend sometimes reconnecting even when its already connected
- Fixed drag and drop in the avatar list on the trust screen
- Fixed special badges not showing up when theres no avatar equipped
- Fixed badges being cleared on avatar reload
- Fixed a OOM crash with scripts that uses macOS newlines format
- Fixed a memory leak with the particle system
- Fixed a memory leak with the sound system
- Fixed textures being able to be accessed when referenced outside of the model folder
- Fixed config API overwritting the data file if nothing was previously loaded
- Fixed avatar events sometimes running before the avatar finished loading
- Fixed ghost selected players when changing filters in the trust screen
- Fixed stack overflow errors crashing the game on script init
- Fixed some unused textures in blockbench not being registered properly
- Fixed a crash with custom textures with invalid chars on their names
- Fixed being unable to index the entity api and derivades
Beta 0.1.0 Release Candidate 10
Changelog
Backend
- completely reworked the backend, with a better, stable and faster version of it
- it now relies on http requests and also websockets
Settings
- added a setting for toggling the Figura Paperdoll Rendering under vanilla inventories (default on)
- added a setting to change the Script Minify Strength (see the scripting section for more info), (default LIGHT)
- added a new setting to toggle whether UI elements should render the avatar portrait instead of the vanilla skin, (default OFF)
currently locked as of the portrait rendering is VERY glitchy
- added setting for the toast total duration (default 5.0) and, for larger toasts where the title and the message are split, the duration for which the title will be shown before switching to the message (default 2.0)
the duration is specified in seconds
- added a setting to change how the interaction with the action wheel is done
- changed backend ip settings to accomodate the new backend
UI
- on the Trust Screen, players can now be dragged and dropped between categories, as an alternative way to change trust level
- the selected player outline color in the Trust Screen now matches their trust level color
- in case of a script error, the debug screen now keeps the last instructions count, shown in red
- rewrote figura toasts
now messages are clamped to the toast width
will utilize as many lines as it needs (yes it will clip out of bounds vertically)
if the title or the message uses more than one line, the title will be shown separately, first
- changed text field texture
- when opening a panel, its lists will be automatically scrolled to the selected entry
- updated birthday splashes :3
- fixed (to an extent) the paperdoll rendering when riding vehicles
- in the advanced Trust Screen, added an option to precisely change the trust values
replaces sliders with a (number) text field
can be inputted any value
values over the trust limit wont be converted to infinity (2147483647)
- changed the switch button texture
- added a button in the trust screen to filter only players who are using figura (have an active avatar)
- you can now search players also by UUID in the trust screen
- when in third person and no player is being targeted, the popup menu now gets the entity youre spectating instad of always yourself
Avatar
- added "moveTo" field, as child of "customizations"
moves the target part to the new destination
used for multi-model parenting, for example, a separated model for accessories only
- added "visible" field, also a child of "customizations"
sets the initial visible value of parts
- anything that allowed for hex colors, now also allows for minecraft color names
- added the "autoAnims" field
similar to autoScripts, but instead it takes animations paths and names
used to automatically play animations on avatar load
Commands
- the avatar debug command now also includes a detailed view of the current avatar file size
Models
- changed how textures are loaded
figura will now try to get the texture from the reference path of the model
if the path is outside the avatar folder, or if the file does not exists, the texture will be loaded from the model source (old behaviour)
the name inside the TextureAPI is determined from where the texture has been loaded from
modifying file/path textures now updates the model in game, without having to also save/re-apply the texture in blockbench
- added Portrait parent type, used for UI elements like the player list
- avatar NBT has been changed to address the new texture format, causing old avatars to be incompatible
Animations
- "override" toggle in blockbench now overrides all channel types instead of only ones that have keyframes
- the "override" function has been split into the three channels types
the function still exists to change all types at once
- "getOverride" function has been removed
- added "overrideRot", "overridePos" and "overrideScale" to set the override for a channel
- added "getOverrideRot", "getOverridePos" and "getOverrideScale" to get the override value
Trust
- internally reworked the trust system
- due to the above, all trusts have been reset to default
- third party APIs can now include their own trust settings
check the figura custom api example repository to see how to add it yourself
- when custom trust settings are present, advanced list will also contain those, and a label to identify the source of each section
- added a new trust, which controls the TextureAPI max texture size
- blocked category now behaves similar to the local category
all trust changes inside it wont be preserved between game sessions
- when logging all players scripts, blocked users errors wont be printed in chat
Docs
- added item "UseActions" enum to the docs
- added from the render events, "RenderModes", to the enum docs
Scripting
- added global "listFiles", which lists all files in a specific directory
if the first argument is nil, it will list from the avatar root directory
a second boolean argument can be given to also include files in subfolders
- all print functions now returns a string of what has been printed
- "printTable" now have a third argument, a silent mode, which disables output to chat, but still returns the formatted string
- scripts can now be minified, with different strengths
minify strength is changed by a config
"Light" removes comments and indentation, preserving line breaks
"Heavy" removes all line breaks, replacing them with spaces where a space required
- math.lerpAngle now is reduced (modulo) by 360
- vectors can now be unpacked with ":unpack()" function
- removed "vectors.rainbow()" as its easy to reproduce with other functions
- the "player" (and "user") field are no more nil during the script init
attempting to get any function will throw a custom error
exception for "isLoaded", which is the replacement for checking if the player was initialized
- vectos "applyFunc" now have a second argument, the current iterated index
- the "require" function now allows returning varargs
Events
- render and post_render events are once again called by the paperdoll
a second argument is given to them, a String with the context (source) of the event
- removed preview_render and post_preview_render event to reflect changes above
- skull_render event is now also called from entities, however its second argument (block position) is nil
also if its function returns true, it will simply cancel the skull rendering, not rendering even the vanilla head
- added a new event, use_item, that is triggered every time an item is being used
first arg is the item, second arg the use animation, third arg the amount of particles it would generate
- chat messages modified by the chat_send_message event will not be logged on console with the original message
Texture API
- a new API for creating/editing textures at runtime
- textures can be created by specifying a name, width and height
- or by loading a base64 string of the image
- can be registered up to 128 textures
- created textures are initialized with a default pink colour
- the api has a function to list all of your avatar textures
- custom textures can be accessed by the index metamethod of this api
- in case a custom texture was not found, it will try to get the avatar texture with the same name
Texture
- the texture object from the TextureAPI
- have some basic functions like "getPixel" and "fill" (check docs for more)
- all changes must be manually applied before being seen in game
Nameplate API
- the badges position are now customizable by adding the string "${badges}" together with your text
- new lines on tab and chat nameplates are now replaced with a space
Particle API
- completely reworked particles
- particle objects can be accessed by the __index metamethod
- added "removeParticles" which clears all of your particles
- the function "addParticle" has been kept, however now it also returns the particle it spawned
- particles now have an owner
- avatar particles are now removed when the avatar is unloaded
Particle
- object that contains the particle data
- can be scaled, moved, coloured and more (check docs for full functionality)
- can be spawned and removed from the world on demand
Sound API
- just like the particle api, the sound api has been reworked
- sounds objects are accessed by the __index metamethod
- the function "playSound" has been kept, and now it returns a sound object
Sound
- the object that controls a sound itself
- the sound object can be changed even when the sound is being played
volume, pitch, stop, etc (check docs)
Config API
- added a new API, for now its only used to save variables/data between sessions
- only allows for primitive types, vectors and matrices, just like pings
- formely known as "data api"
CustomModel API
- similar to "getTask", "removeTask" now clears all tasks if no task name was given
- "setPrimaryTexture" (and secondary) now allows for a "CUSTOM" type, which is either a string (name) of the texture or the texture object
- added "overrideVanillaRot", "overrideVanillaPos", and "overrideVanillaScale" to check if this part vanilla transforms are being overridden by any animation
- added "getTextures" which returns a list of the textures used by this part
note that this does not include child parts, so groups will probably have an empty list
Text Render Task
- added "isRight" and "right" which, similar to centred, makes the text render anchored on the right side
incompatible with the centered mode
Host API
- added a debug function, "saveTexture", which takes a Texture object and saves it in the cache folder
- changed "getScreen" to include the full class path of the curr...
Beta 0.1.0 Release Candidate 9
Changelog
Events
- events are no longer async, but still queued
UI
- popup menu now hides the targeted entity nameplate
Fixes
- fixed a crash with hex colors input with more than 6 digits
- fixed events sometimes being skipped or executed twice
- fixed part to world matrices having wrong values when the paperdoll is enabled
- fixed a random crash when rendering/clearing avatars
- fixed LegacyRandomSource script error
Beta 0.1.0 Release Candidate 8
Changelog
Custom Model Part API
- added the mode "NONE" for setTextures, which simply doesnt render the texture
- added "getUV", "getUVPixels" and "getUVMatrix", which behaves the same as its "set" counterparts
Biome API
- added "getTags" which returns a list of tags added by data packs
Host API
- added an option to use "getSlot" with integer slot indexes
Player API
- "isSkinLayerVisible" now allows for ommiting "_leg" for "left_pants_leg" and "right_pants_leg" parts
Events API
- added a new way to register events, function events.ReNdEr(delta) end, (case insensitive), old way is still avaiable and required if you want to unregister the event later
- events are now run asynchronously, in order
Text Render Task
- renamed "isCentred" to "isCentered" to match the US english
Action Wheel
- actions now have an extra parameter for "actions", which is itself
Animations
- fixed accessing animations for models inside subfolders, the new way to accessing them is now "animations['subfolder.modelname'].animationName:play()"
Custom Sounds
- fixed custom sounds not having its subfolders path in the name, now its "path.sound" instead of just "sound"
Trust Settings
- added a new trust setting for changing avatar playsound volume per player
Scripting
- errors will now try to print the script line that errored
- "misc" functions (pings, action wheel, keybinds, animations) are now considered an event (internally only), and uses the TICK trust values
- fixed require not using, nor accepting, standard lua separator for folders, now it uses "." by default, but also allows for "\" and "/"
UI
- avatar size limit is now given by the backend instead of being hardcoded at 100kb
- improved descriptions of the avatar info widget
- improved toast error description when loading avatars
- improved descriptions of the backend buttons (upload, reload, delete)
- player heads are now rendered in the tablist and in the trust panel
- added a button to show disconnected (yet loaded) players in the trust panel
- fixed a glitch with the rendering of lists in the panels
- popup menu now can shows both error and version warnings, if both applies to the current player
- error and version warning badges are now separated from the main figura badge
Fixes
- fixed paperdoll rendering
- fixed print of decimal numbers
- fixed camera parts not rendering in the paperdoll
- fixed rendering of fire overlay in the paperdoll
- fixed avatar info widget in the trust settings warning logic (was limit - 100 now its at 75% of the limit)
- fixed pcall catching resource limit errors
- fixed the docs of functions that returns an item, saying it could also return nil
- fixed colors not accepting short hex values
- fixed complexity calculation logic
- fixed local avatars being able to send pings
- fixed a rare crash when printing things on chat
- fixed client "getTextWidth" and "getTextHeight" allowing for nil values
- fixed entity "getVariable" allowing nil values
- fixed pings, when registered only locally, having a different ids from the uploaded avatar
- fixed "getOriginRot" for vanilla model parts being changed when a second instance of the avatar (paperdoll) is being rendered
- possibly fixed an glitch with pehkui when rendering the avatar in the inventory
- fixed lua errors being suppressed by the limiting of chat printing
- fixed events starting while other events are still running, causing incorrect instruction counts, leading to resource limit errors
- fixed multiplying matrices by a number changing the matrix instead of modifing a copy of it
- fixed animations playing when the game is paused, if the animation is loaded while the game was paused
- fixed play sounds erroring for integer xPos value
- fixed backwards matrices multiplication when multiplying with another matrix
- fixed some animations with speed 0 causing its parts to vanish
- fixed a concurrent error when registering and removing events
- fixed error in logs when trying to get data from non-figura users
Beta 0.1.0 Release Candidate 7
Changelog
Custom Model API
- setPrimaryTexture (and secondary) now allows for "nil" values to reset to default/parent
Nameplate API
- removed "background" field
- added "setBackgroundColor" which takes an rgb color and alpha; setting alpha to 0 hides the background; while setting to nil will use vanilla's background opacity, which is controlled by the accessibility setting
Host API
- added "appendChatHistory" which, as the name says, adds a new entry on your chat sent messages history; requires the chat messages setting
Vanilla Model API
- hiding the LEFT/RIGHT ITEM now also hides it in first person; your arm will be rendered instead
- added "getOriginVisible" for model parts, where returns if that part is being rendered in vanilla
Events API
- added the event "PREVIEW_RENDER" and "POST_PREVIEW_RENDER", where it is called when the avatar is rendered in some UI element (inventory, figura wardrobe and trust panel, paperdoll); the source is sent as argument ("FIGURA_GUI", "PAPERDOLL", "MINECRAFT_GUI")
Player API
- added "isSkinLayerVisible" which takes a "player model part" as argument; returns whetever if that part is toggled in the skin customization options
UI
- scrolling anywhere in the trust screen does not changes the selected player trust level anymore
- removed the current instructions text for the selected player, in the trust screen
- removed the avatar size text in the trust screen's player list
- added hoverable info about the player's avatar in the player list at the trust screen
- entity previews do not have a limit anymore, either size and screen position (dont forget that middle click resets it to default)
Docs
- added "PlayerModelParts" in the enum docs
- changed the text of "CHAT_SEND_MESSAGE" event, to include that the return value matters
Commands
- run command now doesnt errors the avatar anymore
- added load command, which simply just reloads your avatar
Settings
- added a setting for disabling the backend "connected" and "disconected" toasts
- added a setting for choosing the update channel (pre-release or releases) of figura
Misc
- added the constants for the player scale in relation with the world and vice versa, under the "math" global table
- now the mod checks for updates when connecting to the backend
- added badges for special people <3
- added entrypoint for third party APIs
Bug Fixes
- fixed translation keys inside the popup menu
- fixed setTexture from model parts breaking the model and/or causing erros
- fixed avatars initializing without a name sometimes
- fixed UI default color using the wrong color
- fixed debug command not including null fields
- fixed hovering of entries in the trust screen's player list
- fixed avatar.json error toast
- fixed action wheel texture being wack in some resolutions
- fixed animations having the wrong interpolation type when at two keyframes with different interpolation types
- fixed unable to use lowercase "renderType" at item render tasks
- fixed a concurrent error with animations
- fixed loading badge being able to be colored
- fixed matrices minus actually adding instead of subtracting
- fixed events registration and removal
- fixed flames rendering in the hud entity
- fixed partToWorldMat returning wrong values
- [1.18 only] fixed inverted Z axis for parent parts pos