Jump to content

[Solved][1.14.4] Multipart model; Conditional texture?


imacatlolol

Recommended Posts

I have a multipart model for a block with a lot of states (maybe too many, but that's another issue). In it, some of the block state properties needs to be able to change the texture of the model. Ideally I'd add conditions in the multipart model definition to set the texture appropriately, but it seems like this feature isn't available.

 

Since I'd prefer not to make a hundred or so new model JSONs just to do what I want (since that would increase load time and make things tough for resource pack makers), is there a good workaround for what I'm trying to achieve?

Edited by imacatlolol
  • Like 1

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Link to comment
Share on other sites

Bumping, if that's alright.

One of my ideas for a solution would be to assign it a dedicated texture map that contains all of the variants, then somehow offset the UVs in a custom baked model. Not sure how to go about offsetting things like that, if that's even the best idea.

Edited by imacatlolol
Clarity

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Link to comment
Share on other sites

11 hours ago, imacatlolol said:

One of my ideas for a solution would be to assign it a dedicated texture map that contains all of the variants, then somehow offset the UVs in a custom baked model. Not sure how to go about offsetting things like that, if that's even the best idea.

I recommend against making your own texture map. Also, baked models I’ve always point into the block texture map, you would have to stitch your own texture map into the block texture map. I think that the best thing to do is to make the json files. Also, metadata (blockstate files) should be kept separate from data (model files).

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Link to comment
Share on other sites

1 hour ago, Cadiboo said:

I recommend against making your own texture map. Also, baked models I’ve always point into the block texture map, you would have to stitch your own texture map into the block texture map.

For clarity, my idea there was to have a single set of model jsons and do this, which would (from what I understand) ensure all variants are stitched onto the block texture map, even if they aren't directly referenced in the variant models. Since it does ruin the space efficiency of the generated texture atlas, I would probably instead look into the TextureStitchEvent to see if I can insert the textures there.

1 hour ago, Cadiboo said:

I think that the best thing to do is to make the json files.

As suggested, I tried making all of the json files. It gives me the desired effect, of course, but it also added a significant (i.e. noticeable/non-trivial) increase in loading time. It also turned my filesystem into spaghetti, forcing me to use subdirectories just store all of the variants for each json model to not clog things up. This is all for just one complex block, which means the problem could compound if I ever want to add similarly detailed multipart blocks.

 

This is really just an edge/corner-case issue, so using the normal route for this wouldn't be the end of the world, but I'd really prefer a less painful route. On the topic of baked models, something like this might be an option, especially if I use the TextureStitchEvent as I'd mentioned.

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Link to comment
Share on other sites

After a bit of digging and testing, I've determined a solution that is adequate, though not very clean. (Pinging @Okmeis so they can see if this works for them)

  • Add all needed textures to the atlas using TextureStitchEvent.Pre.
  • In ModelBakeEvent, grab all existing registered models relating to the block from the registry, then wrap each state's model in a custom baked model and replace the registry entry.
    • The custom baked model can then use the handy vanilla BakedQuadRetextured to "change" the texture of the wrapped model's quads.

This feels kind of hack-ish, but it does produce the desired results with a minimal impact on load times and no file-spaghetti. I'm sure a superior solution can be found, so I'm happy to try other ideas.

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.