GithubHelp home page GithubHelp logo

moonlight-mc / figura Goto Github PK

View Code? Open in Web Editor NEW
213.0 18.0 36.0 3.1 MB

Primary repo for the Figura Project

License: GNU Lesser General Public License v2.1

Java 100.00%
minecraft modding avatars client-side java fabric

figura's Introduction

Downloads

Modrinth

Curseforge

Join the Discord!

Figura REQUIRES the Fabric API to run. You can find the Fabric API here.

Figura

The Figura Project is dedicated to re-imagining the way avatars in minecraft work, as a way to allow players to more creatively express themselves.

The goal is to achieve this in a purely client-side mod, using an external server to store and serve avatars, and to create a mod that enables users to create custom, interesting avatars that do not risk the safety or performance of other users.

Figura is specifically built to allow creators as much creative freedom as possible. This comes in the form of an extremely easy to use creation pipeline, and a verbose, extensive lua API for reading data from Minecraft. The file size limit is 100kb, which doesn't sound like much, but goes a long way when it comes to creating a minecraft avatar.

Features

Notable features for the mod include

Figura is Client-Side Only

  • Figura is indented to be a fully client-side mod. User Avatars are retrieved from and uploaded to a server run by the Moonlight development team. This means a Minecraft server does not need the mod installed for users to see your avatar.
  • Other users are required to have the mod installed to see your avatar, and you must have it installed to see theirs. It's physically impossible to change this, so DO NOT ask for it.

Creative Freedom

  • The goal of Figura is to allow creators to create freely without worry of limitations like rendering or scripts. The file size limit is the only real limit on creations, everything else is determined by a user's personal settings, which can always be turned off, or on. This allows for full creative freedom for creators, and safe viewing for everyone else.

Client-Side Performance limitations.

  • Each user can decide on the performance settings for everyone they see individually. This means that someone with a lower-end PC can set avatars to render at less detail, while someone with a beast PC can set things to have practically no detail limit.
  • Model Complexity is limited on the fly. Model parts are rendered according to the hierarchy, allowing creators to prioritize specific details over others. Quads/Tris on mesh models are limited using the same system.
  • Lua Script Execution is limited. Scripts run by non-trusted users are limited to a specific instruction count, ensuring that it is impossible for random users to destroy framerate using just "while true do end". Similarly, Lua Scripts are incredibly sandboxed, not allowing for any systems beyond basic math libraries and executing very safely guarded Java code. This ensures users cannot write malicious scripts. On top of both of these factors, lua scripting is multi-threaded, ensuring that the main game's FPS will never drop due to a script executing slowly (though framerate can still drop due to rendering)

Easy Creation

  • Models are simply blockbench projects. They work 1:1 with Blockbench, enabling easy comparison and creation. Animations/Particles are not yet supported.
  • Texture mapping with Models/OBJ Models match exactly as you'd expect. There's no difficult setup. If your texture maps correctly in Blockbench or whatever software you use for OBJ files, it will match in-game.
  • All files hotswap once initially loaded, enabling extremely fast iteration time. In layman's terms: Once you load an avatar from local files, any changes to those local files will show in-game immedaitely, without even re-starting the game. However, other people will NOT see your new until you press the upload button. Once you've pressed it, it takes 10~ seconds for the model to update for them.

Creation

Model Creation is primarily achived through five steps:

  1. Blockbench Projects imported into the game while using the mod. Special names are used to assign model parts to specific vanilla body parts for animation syncing, as well as rending some parts with/without certain armor or held items, during certain animations, etc. This enables a lot of customization with little to no scripting.
  2. Texture files created as one would normally create a .png file. No limit on size for the image itself, though it is included under the maximum 100kb file size limit for any avatar.
  3. [OPTIONAL] .Obj files created through Blender or similar programs. These allow for non-cube models to be added to your avatar, for more creativity. Note that importing these is typically significantly more expensive than using Blockbench parts.
  4. [OPTIONAL] Creating a .lua script file to indicate any custom behaviour your avatar may have.
  5. Import all above asset files with a single click, and upload the entire avatar with another click.

Plans

Plans for the future of Figura (sorted more or less by priority) include

  1. Karma System
  • A system for managing player behaviour. Getting reported hurts your karma, while not getting reported rewards you karma. Users will be able to limit avatars based on someone's karma, allowing for a sort of "crowd moderation" system.
  1. Functional Shaders
  • Allowing users to write their own shaders for avatars/parts of avatars. This will be done in 1.17 with the rendering system updates.
  1. Network API
  • Allow the scripting API the ability to send small amounts of information to anyone viewing someone's avatar using a messaging system. Severely rate & data limited, but it will be routed through the Figura server, keeping Figura's "client-only" design in place.
  1. Player Worlds
  • Allow players to upload a structure file generated using structure blocks to the Figura server, and allow other players to "visit" those structures in an empty world. These worlds could be used for showing off avatars, or just builds, or anything else.
  1. Part Browser/Avatar Stitching
  • The final planned feature for moving Figura out of alpha/beta will be the ability for players to use an in-game browser to pick "parts" from publicly avaliable sets, and automatically use those parts together, merging them into a single avatar.

figura's People

Contributors

basiqueevangelist avatar coolmineman avatar deltanedas avatar felix14-v2 avatar foundationgames avatar francy-chan avatar gakuto1112 avatar hibiii avatar kalkronline avatar khodyn avatar lambdaurora avatar martinz64 avatar meowspambot avatar moonlight-maya avatar omoflop avatar scotsguy avatar sekoiatree avatar silverandro avatar slymeball avatar snavesutit avatar superpowers04 avatar theonetruezandra avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

figura's Issues

Having a Vanilla Alex skin breaks Held Item Model modifications.

If your vanilla Minecraft skin uses the Alex base, with 3-pixel wide arms, modifying the held_item_model variables, such as with held_item_model.RIGHT_HAND.setPos({1.5, 0, 0}), causes it to be offset slightly, since the Alex skin presumably also modifies held item positions. I've included an image below of an avatar that uses the above script, marked with Steve and Alex icons. Note the axe is closer to the torso on the Alex version than on the Steve version.
alex_handerror

Have not been able to upload my avatar because of file size being bugged

My avatar which is 28322 bytes displays ingame as -0.00kB.
When trying to upload, this shows up in the logs

[16:25:03] [Worker-Main-14/INFO]: [STDERR]: java.lang.NullPointerException
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:451)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2499.method_10713(class_2499.java:91)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2499.method_10713(class_2499.java:91)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2499.method_10713(class_2499.java:91)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2507.method_10631(class_2507.java:95)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2507.method_10628(class_2507.java:83)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2507.method_10634(class_2507.java:44)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.blancworks.figura.PlayerData.getFileSize(PlayerData.java:152)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.blancworks.figura.gui.FiguraGuiScreen.getFileSizeText(FiguraGuiScreen.java:199)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.blancworks.figura.gui.FiguraGuiScreen.lambda$click_button$6(FiguraGuiScreen.java:193)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at net.blancworks.figura.gui.FiguraGuiScreen$$Lambda$6301/974293010.run(Unknown Source)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1618)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1610)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689)
[16:25:03] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: java.lang.NullPointerException
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:451)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2499.method_10713(class_2499.java:91)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2499.method_10713(class_2499.java:91)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2499.method_10713(class_2499.java:91)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10555(class_2487.java:458)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2487.method_10713(class_2487.java:116)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2507.method_10631(class_2507.java:95)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2507.method_10628(class_2507.java:83)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.minecraft.class_2507.method_10634(class_2507.java:44)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.blancworks.figura.network.FiguraNetworkManager.lambda$postModel$4(FiguraNetworkManager.java:229)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at net.blancworks.figura.network.FiguraNetworkManager$$Lambda$6304/421668926.run(Unknown Source)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1618)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1610)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689)
[16:25:10] [Worker-Main-14/INFO]: [STDERR]: 	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Can't find my character in Figura pannel

I wanted to have an animated firey head. I made an animated model, downloaded the model.bbmodel and the texture, and put it here: .minecraft/figura/model_files/firey_head
but i can't find it! Help!

Avatar override for a single server

It could be a good idea to allow the player to set avatars per-server—either as an API feature or just the client dynamically changing the avatar when entering a server.

Rotating Avatar too far in Inventory/Figura Panel breaks certain scripts

My Avatar has eyes that move left and right based on the head's rotation relative to the body. As far as I can tell with some basic testing, rotating so my yaw (using logTableContent(player.getRot()) to get this value) goes somewhere below 0 or somewhere above 360 then opening the Inventory/Figura Panel causes the eyes to bug out (See below). I have no clue how feasible this is to fix, but it doesn't happen in normal gameplay, only in those specific menus.
buggedeyes

The avatar causing issues:
Damonj17.zip

UV Functions not Working as Expected

From what I've heard, UV values in the getUV() and setUV() functions are intended to be normalized between 0 and 1. However, when I run part.getUV(), I get values greater than 1. Even more strangely, calling the function on two different parts (which each have the same UV coordinates in Blockbench) will give different numbers than one another.

Model with the problem:
uv_bug.zip

water acting completely opaque sometimes

16.29.24.mp4

when swimming, sometimes only the top of the bean will be visible, while at other times it's all visible as expected.
using sodium, indium, hydrogen, lithium

Other Player Second Layer Rendering Flat & Mis-sized

2021-03-28_21 19 22
Grogu_Comparison

We are both using the exact same files (bbmodel, lua, & png). All are attached.

Mando.zip

When playing, the skin shows up normally for each of us individually, but renders flat & mis-sized for the other. I see him as flat & mis-sized (Grogu). He sees me as flat and mis-sized (Grogu).

The flat render is missing the second layer. The mis-sized Grogu and shut doors on the carrier are all blocks that are inflated in BlockBench. Seems like these could be related since the second skin layer is also an inflation.

Model transformation for head isn't showing up in-game

I've scaled and moved the model in Blockbench, but for some reason, it's shown off to the side in-game with its scaling lost. I might have done something wrong in Blockbench since I only started using it today and I don't know much, but I've tried to seek help and others didn't know what was causing the issue either. It might be a bug.

image
image
image

can't hide vanilla_model on multiplayer

singleplayer mad drip
Screenshot_08:45:46

multiplayer NOT drip
Screenshot_08:45:16

code:

local function disable(model)
	for name, part in pairs(model) do
		part.setEnabled(false)
	end
end

-- hide the player model
disable(vanilla_model)
-- hide incorrect armor model
disable(armor_model)

strangely enough, works fine with armor_model.

Ask to open link when pressing "Help" in the Figura menu

Currently, pressing "Help" opens an external link without prompting. It should ask to do so like the vanilla "Send Feedback" and "Report Bugs" buttons so people who don't want to unintentionally start up their browser can avoid doing so.

not working

i downloaded this bbmodel, its named player_model and its texture is texture.png

model is in folder called Models and texture is in folder called Textures

i dont know whats wrong, its not showing up at all

Error keeps getting spammed in the log

[03:48:30] [main/INFO]: [STDERR]: java.lang.NullPointerException
[03:48:30] [main/INFO]: [STDERR]: at net.blancworks.figura.models.CustomModel.getMaxRenderAmount(CustomModel.java:53)
[03:48:30] [main/INFO]: [STDERR]: at net.blancworks.figura.models.CustomModel.render(CustomModel.java:59)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_591.method_2828(class_591.java:607)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_922.method_4054(class_922.java:134)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_1007.method_4215(class_1007.java:65)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_1007.method_3936(class_1007.java:42)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_898.method_3954(class_898.java:261)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_490.method_29977(class_490.java:149)
[03:48:30] [main/INFO]: [STDERR]: at com.mojang.blaze3d.systems.RenderSystem.runAsFancy(RenderSystem.java:1439)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_490.method_2486(class_490.java:149)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_490.method_2389(class_490.java:111)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_465.method_25394(class_465.java:101)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_485.method_25394(class_485.java:43)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_490.method_25394(class_490.java:92)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_757.method_3192(class_757.java:616)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_310.method_1523(class_310.java:1048)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.class_310.method_1514(class_310.java:681)
[03:48:30] [main/INFO]: [STDERR]: at net.minecraft.client.main.Main.main(Main.java:215)
[03:48:30] [main/INFO]: [STDERR]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[03:48:30] [main/INFO]: [STDERR]: at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[03:48:30] [main/INFO]: [STDERR]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[03:48:30] [main/INFO]: [STDERR]: at java.lang.reflect.Method.invoke(Unknown Source)
[03:48:30] [main/INFO]: [STDERR]: at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:226)
[03:48:30] [main/INFO]: [STDERR]: at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:139)
[03:48:30] [main/INFO]: [STDERR]: at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:27)
[03:48:30] [main/INFO]: [STDERR]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[03:48:30] [main/INFO]: [STDERR]: at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[03:48:30] [main/INFO]: [STDERR]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[03:48:30] [main/INFO]: [STDERR]: at java.lang.reflect.Method.invoke(Unknown Source)
[03:48:30] [main/INFO]: [STDERR]: at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:196)
[03:48:30] [main/INFO]: [STDERR]: at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:231)
[03:48:30] [main/INFO]: [STDERR]: at org.multimc.EntryPoint.listen(EntryPoint.java:143)
[03:48:30] [main/INFO]: [STDERR]: at org.multimc.EntryPoint.main(EntryPoint.java:34)

Weird rendering in multiplayer

Upon trying this mod with a friend in multiplayer (both using the latest prerelease 0.0.4f) the default skin doesn't hide and then sometimes does hide depending on whether I have an item in my hand or not or just the angle I'm looking at it
Here is a gallery of different angles and bugs: https://arxius.io/a/feebd6ad
It is worth noting that all these skins work perfectly fine in singleplayer
I'm aware of this issue but thought I could add some more information to maybe help a bit
Clearing avatar doesn't always work it seems to glitch and show parts of models with wrong textures till a new model is selected and uploading models don't seem to change for the other person on the server
EDIT
In addition I have noticed that the player skin does not hide at all when you are not using a custom player model.

Models using NO_PARENT can't use setPos()

I have a cube under the NO_PARENT folder, and using model.NO_PARENT.the.setPos{1, 2, 3} for example, doesn't change it's position in the world. The only factor that changes it's position is the position field in blockbench.

image

getVelocity in the api is not multiplayer compat

getVelocity only works for your player, and not for other players, this is due to mojank more than likely.
a workaround in lua looks like
velocity = {player.getPos()[1] - lastpos[1], player.getPos()[2] - lastpos[2], player.getPos()[3] - lastpos[3]}
lastpos = player.getPos()
would be nice if it was implemented into the api instead of the mojank way (obviously it would need to be changed some since different languages and all.)

Transparent faces are rendered opaque

When you set a face to transparent via the button in blockbench (size 0/0, pos 0/0, no texture) it will be rendered opaque in-game (size 1/1, pos 0/0, normal texture).

[ Enhancement ] Coloured Mark

I'm to lazy to create a PR for this
but we can have the icon colours still be cyan if we append §3 to them.
Example:

"figura.mark": "§3△"

Second layer skin parts can't be disabled

vanillaModel.TORSO.setEnabled(false) works,
but
vanillaModel.JACKET.setEnabled(false) doesn't.

Also in the wiki the second head layer part is called HELMET, but its HAT in the code.

support parsing a binary model

CBOR is considerably smaller than JSON.
while it may not be parsed by blockbench, it would be nice to support minified models that are much more compact (and thus can be more detailed for the same disk usage)

blockstate bug

block = world.getBlockState(player.getPos())
block.name does not return the block that you are standing in and offset isn't the same every time

Spaces in a directory causes an error when trying to open the Figura folder.

Space is between "1.16.5" and "Fabric".

[07:15:36] [main/ERROR]: Couldn't open uri 'file://D:/Documents/MultiMC/instances/1.16.5 Fabric/figura'
java.net.URISyntaxException: Illegal character in path at index 44: file://D:/Documents/MultiMC/instances/1.16.5 Fabric/figura
	at java.net.URI$Parser.fail(Unknown Source) ~[?:1.8.0_281]
	at java.net.URI$Parser.checkChars(Unknown Source) ~[?:1.8.0_281]
	at java.net.URI$Parser.parseHierarchical(Unknown Source) ~[?:1.8.0_281]
	at java.net.URI$Parser.parse(Unknown Source) ~[?:1.8.0_281]
	at java.net.URI.<init>(Unknown Source) ~[?:1.8.0_281]
	at net.minecraft.class_156$class_158.method_670(class_156.java:268) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.blancworks.figura.gui.FiguraGuiScreen.lambda$init$3(FiguraGuiScreen.java:86) ~[figura-0.0.2.jar:?]
	at net.minecraft.class_4185.method_25306(class_4185.java:33) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_4264.method_25348(class_4264.java:16) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_339.method_25402(class_339.java:149) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_4069.method_25402(class_4069.java:27) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_312.method_1611(class_312.java:92) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_437.method_25412(class_437.java:435) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_312.method_1601(class_312.java:92) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_312.method_22686(class_312.java:162) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_1255.execute(class_1255.java:94) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_312.method_22684(class_312.java:162) ~[intermediary-minecraft-1.16.5-client.jar:?]
	at org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:36) [lwjgl-glfw-3.2.2.jar:build 10]
	at org.lwjgl.system.JNI.invokeV(Native Method) ~[lwjgl-3.2.2.jar:build 10]
	at org.lwjgl.glfw.GLFW.glfwPollEvents(GLFW.java:3101) [lwjgl-glfw-3.2.2.jar:build 10]
	at com.mojang.blaze3d.systems.RenderSystem.flipFrame(RenderSystem.java:109) [intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_1041.method_15998(class_1041.java:308) [intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_310.method_1523(class_310.java:1068) [intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.class_310.method_1514(class_310.java:681) [intermediary-minecraft-1.16.5-client.jar:?]
	at net.minecraft.client.main.Main.main(Main.java:215) [intermediary-minecraft-1.16.5-client.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_281]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_281]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_281]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_281]
	at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:226) [fabric-loader-0.11.2.jar:?]
	at net.fabricmc.loader.launch.knot.Knot.launch(Knot.java:146) [fabric-loader-0.11.2.jar:?]
	at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:28) [fabric-loader-0.11.2.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_281]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_281]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_281]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_281]
	at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:196) [NewLaunch.jar:?]
	at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:231) [NewLaunch.jar:?]
	at org.multimc.EntryPoint.listen(EntryPoint.java:143) [NewLaunch.jar:?]
	at org.multimc.EntryPoint.main(EntryPoint.java:34) [NewLaunch.jar:?]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.