Jump to content

Rendering ModelBase items


Toma™

Recommended Posts

I have few questions about ModelBase rendering (I'm looking for few hints to point me to right direction):

1. How to tell the game to register the model (from my research there was method in ForgeClient class to register item renderer, but now I can't find it)

 

2. Based on Forge docs there is TEISR which I have atached to the items I want to on client side. Now I need baked model to use the isBuiltInRenderer method. So from my understanding I would need 3 classes for each item (base class, renderer and model), I guess.

 

I would like to use the ModelBase models since the .json is limited in the size so then I think I can't use the item blockstates.

Link to comment
Share on other sites

18 minutes ago, Toma™ said:

I would like to use the ModelBase models since the .json is limited in the size

Define "limited in the size". You can use the scale transform to make the model bigger.

 

18 minutes ago, Toma™ said:

Now I need baked model to use the isBuiltInRenderer method.

Provide a dummy IBakedModel then.

 

18 minutes ago, Toma™ said:

from my research there was method in ForgeClient class to register item renderer, but now I can't find it

That method was deprecated a while ago. Use the methods that the Item class provides.

 

So far you have not explained what you need a TEISR for. Please elaborate, the functionality you want might be acheivable with basic json.

Link to comment
Share on other sites

3 minutes ago, V0idWa1k3r said:

So far you have not explained what you need a TEISR for. Please elaborate, the functionality you want might be acheivable with basic json.

 

I want to create weapon with better details so default scale function is not enough for me. Also I was looking when vanilla uses the TEISR and that's for the shield based on it's NBT. I want to do something like that (render atachments on the weapon based on NBT). I have the NBT working, I'm just looking for the rendering. From what I have found the .json is limited to 3x3 block size and becausd of that I think I'll need to use ModelBase

Link to comment
Share on other sites

You can do that without a TEISR. Take a look at https://github.com/CAS-ual-TY/GunCus, the implementation of it in MinecraftByExample and the multiple topics on this forum about it

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

I have been thinking about few things recently and I would like to know something before I start working. Using IBakedModel for rendering will still allow me to do dynamic rendering (like rendering additional models on my base model based on NBT) and other stuff like animations? Also is using ModelBase bad idea, since I don't really like just scaling the .json model because I think I will want more details and it might be a lot of work to make it properly in smaller scale. So I'm just making sure I don't need the TEISR.

Link to comment
Share on other sites

I’d say use JSON so resource packs can change your models. How is it harder to use JSON than model base? It seems like it would be a lot easier to me

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

7 minutes ago, Cadiboo said:

I’d say use JSON so resource packs can change your models. How is it harder to use JSON than model base? It seems like it would be a lot easier to me

Well I'm bit confused with the JSON system, specially with rendering another models into it. For the model base renderer it looks a little easier (i was looking into some of the flans mod model code). I know there is system similar to blockstate system which is used for the bow, but I'm bit confused with it's usage. Because bow has like 3 states and every state has it's texture. So if I have 5 atachment types + some variants for each of them would I have to write every single combination for the item state or is there easier way? I still have feeling modelbase would be easier, but I'm not really experienced.

Link to comment
Share on other sites

It depends on your use case. If your model doesn’t move, or doesn’t much at all use JSON. If you have something that moves a lot (like a player) use programed models. If you find JSON hard to use, check out http://blockbench.net

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

10 hours ago, Cadiboo said:

It depends on your use case. If your model doesn’t move, or doesn’t much at all use JSON. If you have something that moves a lot (like a player) use programed models. If you find JSON hard to use, check out http://blockbench.net

I know about that, but I think I didn't provide enough information on misunderstood you somewhere. So I will repeat everything here:

1) Using the JSON system will allow me to change the model dynamically based on it's NBT (I have made inventory for ataching atachments to weapons so I would like to render the atachment based on the NBT - so will the JSON model allow me to do that?)

 

2) I would like to implement something like ADS mode for aiming. With some scope atachments I simply render overlay over player screen, but when weapon doesn't have scope I would like to be able to move the model in front of player view to simulate the ADS (possibly in render tick event using some GL methods, I'm not sure if that is the correct way)

 

3) Would it be possible to scale the model in something like render tick event (since I will propably have to do model of some size and then scale it up - I know JSON has function for scaling but if I would need to scale it even more would it allow me to use the GL scale method)?

 

I'm confused with this rendering so thanks everybody for helping me

Link to comment
Share on other sites

32 minutes ago, Toma™ said:

2) I would like to implement something like ADS mode for aiming. With some scope atachments I simply render overlay over player screen, but when weapon doesn't have scope I would like to be able to move the model in front of player view to simulate the ADS (possibly in render tick event using some GL methods, I'm not sure if that is the correct way)

 

3) Would it be possible to scale the model in something like render tick event (since I will propably have to do model of some size and then scale it up - I know JSON has function for scaling but if I would need to scale it even more would it allow me to use the GL scale method)?

 

I'm confused with this rendering so thanks everybody for helping me

You might want to look at the GunCus mod, it does both those things

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

3 hours ago, Cadiboo said:

You might want to look at the GunCus mod, it does both those things

Isn't that mod stuck in 1.7.10? I might be looking at a wrong mod though.

 

3 hours ago, Toma™ said:

1) Using the JSON system will allow me to change the model dynamically based on it's NBT (I have made inventory for ataching atachments to weapons so I would like to render the atachment based on the NBT - so will the JSON model allow me to do that?)

Yes, and that's quite easy.

 

3 hours ago, Toma™ said:

2) I would like to implement something like ADS mode for aiming. With some scope atachments I simply render overlay over player screen, but when weapon doesn't have scope I would like to be able to move the model in front of player view to simulate the ADS (possibly in render tick event using some GL methods, I'm not sure if that is the correct way)

I am not sure this is possible with IBakedModel without some hacky solutions. 

 

3 hours ago, Toma™ said:

3) Would it be possible to scale the model in something like render tick event (since I will propably have to do model of some size and then scale it up - I know JSON has function for scaling but if I would need to scale it even more would it allow me to use the GL scale method)?

Why would you scale it up dynamically? There is no reason to do so.

3 hours ago, Toma™ said:

would it allow me to use the GL scale method

No, but you can use a custom IBakedModel and have a custom model matrix with IBakedModel#handlePerspective(or just transform the quads on the fly when you need to do so).

 

However ultimately I am actually leaning for this being a TEISR use case. Please can you provide some more points of functionality for your gun? Are there part-independent animations? Dynamic textures? Custom shaders? Do you need to render the player's hand? How should your gun be transformed? Are there transformation animations? Are they independent for parts? Do you have parts like gun ammunition clips that may not be rendered at points in time? etc.

In any case a basic JSON is out of the question here unfortunately. The question is - would a custom IBakedModel be sufficient or not.

Link to comment
Share on other sites

1 hour ago, V0idWa1k3r said:

I am not sure this is possible with IBakedModel without some hacky solutions. 

Are you capable of making your own "using animations"?(like eating or drinking).

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

8 minutes ago, Animefan8888 said:

Are you capable of making your own "using animations"?(like eating or drinking).

Well, those kind of animations are simple changes of the model matrix over time. So yes, you should be able to do it using either IBakedModel#handlePerspective or by transforming quad position data on the fly. I would assume the former should work just fine.

Edit: I am not sure whether the OP can do it with a custom IBakedModel or not because they have not specified whether they need to also render the player's arm, and I am assuming that they do want that. That is not possible with a IBakedModel

Edited by V0idWa1k3r
Link to comment
Share on other sites

7 minutes ago, V0idWa1k3r said:

Edit: I am not sure whether the OP can do it with a custom IBakedModel or not because they have not specified whether they need to also render the player's arm, and I am assuming that they do want that. That is not possible with a IBakedModel

He can just render the arm separately in one of the Render events when the player is holding his gun(s).

  • Like 1

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

1 hour ago, V0idWa1k3r said:

Isn't that mod stuck in 1.7.10? I might be looking at a wrong mod though.

 

Yes, and that's quite easy.

 

I am not sure this is possible with IBakedModel without some hacky solutions. 

 

Why would you scale it up dynamically? There is no reason to do so.

No, but you can use a custom IBakedModel and have a custom model matrix with IBakedModel#handlePerspective(or just transform the quads on the fly when you need to do so).

 

However ultimately I am actually leaning for this being a TEISR use case. Please can you provide some more points of functionality for your gun? Are there part-independent animations? Dynamic textures? Custom shaders? Do you need to render the player's hand? How should your gun be transformed? Are there transformation animations? Are they independent for parts? Do you have parts like gun ammunition clips that may not be rendered at points in time? etc.

In any case a basic JSON is out of the question here unfortunately. The question is - would a custom IBakedModel be sufficient or not.

 

Well I would like to possibly add more parts like magazines and use them for animation for reloading. I have 3 different magazine atachments so I would need to create the animation for every single of them.

I don't need dynamic textures, I just need dynamic model rendering based on NBT as explained above.

I wasn't really thinking about shaders and I think I'll leave that alone.

Well if it would be possible (and I know it is) I would like to implement some sort of rendering the arm based on the weapons current state (like reloading to move the hand with the clip etc). Also possibly render the hand holding weapons grip when atached. I know this is not easy, but as soon as I start understanding it atleast a bit I should be able to do more stuff.

I would like to have few animations like reloading and most importantly ADS mode so the shooting can feel more "realistic" rather than just holding your weapon on right side of the screen.

And yes, I have magazines which as explained above should move when reloading. I don't there's need to not render them at all, even when the weapon is empty it should be rendered.

I haven't started models yet, since I'm trying to get the best way to do it.

Link to comment
Share on other sites

Well I suppose in theory it is possible with a custom IBakedModel.

In practice though you will be recalculating quads quite frequently and that may eat a lot of frames.

I would use a TEISR here, even though it is technically possible without one. 

I mean, this

10 minutes ago, Toma™ said:

I have 3 different magazine atachments so I would need to create the animation for every single of them.

would mean that the OP would need to recompute the quad list pretty much every frame of their animation. Or at least parts of it anyway. Potentially all of it if their gun also needs to move during the animation. It should be faster to fill in the rendering buffer with elements each frame than it is to have to recompute quads like this. In theory that is, if anyone has any metrics feel free to correct me here.

Link to comment
Share on other sites

36 minutes ago, V0idWa1k3r said:

In practice though you will be recalculating quads quite frequently and that may eat a lot of frames.

I would use a TEISR here, even though it is technically possible without one. 

I mean, this

Wait, we are forgetting something pretty important. The Model Animation System. 

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Just now, V0idWa1k3r said:

Hmm, that's true. I am not very familiar with it though and don't know how to animate items with it, especially if said items are multipart.

It supports multipart models and there is a doc page for it here. And there is more information in the following pages after the intro.

 

55 minutes ago, Toma™ said:

the best way to do it.

Might be this.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

29 minutes ago, Animefan8888 said:

It supports multipart models and there is a doc page for it here. And there is more information in the following pages after the intro.

 

Might be this.

Okay so based on my quick look into the intro for animations you sent here it looks like I will have to go with the JSON models since they're getting the biggest support by most forge features. I'll propably start making some test models and see how it all goes.

Link to comment
Share on other sites

As I said, GunCus does all of this - custom models based on attachments etc., a custom overlay for aiming, a custom matrix and animation for aiming. You should probably take a look at it.

 

https://github.com/CAS-ual-TY/GunCus

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

  • 2 weeks later...

So in the end I went with the TEISR. However I have some problems now. The item is rendering properly, but I sometimes move the model and it moves it in the GUI and that is another problem because I would like to keep the json item model for the gui. How would I do that? I am not sure, if I should post some code, since it won't propably help. But anyway, there are some bits of the code:

My baked model:

Spoiler

public class BakedModelGun implements IBakedModel
{
	public BakedModelGun()
	{
	}
	
	@Override
	public boolean isBuiltInRenderer()
	{
		return true;
	}
	
	@Override
	public ItemOverrideList getOverrides()
	{
		return ItemOverrideList.NONE;
	}
	
	@Override
	public TextureAtlasSprite getParticleTexture()
	{
		TextureMap map = Minecraft.getMinecraft().getTextureMapBlocks();
		return map.getMissingSprite();
	}
	
	@Override
	public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand)
	{
		return Collections.EMPTY_LIST;
	}
	
	@Override
	public boolean isAmbientOcclusion() 
	{
		return false;
	}
	
	@Override
	public boolean isGui3d()
	{
		return false;
	}
}

 

 

The teisr class:

Spoiler

public class WeaponTeisr extends TileEntityItemStackRenderer
{
	//model
	private final ModelP92 p92 = new ModelP92();
	
	@Override
	public void renderByItem(ItemStack stack)
	{
		//For every item
		if(stack.getItem() == PMCItems.FLARE_GUN)
		{
			
		}
		
		else if(stack.getItem() == PMCItems.P92)
		{
			GlStateManager.pushMatrix();
			bindTexture("p92");
			setupDefaultItemTranslationAndRotation();
			p92.render();
			GlStateManager.popMatrix();
		}
	}
	
	private void bindTexture(String name)
	{
		ResourceLocation rl = new ResourceLocation(Main.MOD_ID + ":textures/weapons/" + name + ".png");
		Minecraft.getMinecraft().getTextureManager().bindTexture(rl);
	}
	
	private static void setupDefaultItemTranslationAndRotation()
	{
		GlStateManager.scale(0.1, 0.1, 0.1);
		GlStateManager.translate(6, 6, 3);
		GlStateManager.rotate(180, 1, 0, 0);
		GlStateManager.scale(0.8, 0.8, 0.8);
	}
}

 

 

and the bake method:

Spoiler

	@SubscribeEvent
	public void bakeModels(ModelBakeEvent e)
	{
		ModelResourceLocation location;
		IBakedModel main;
		
		//Weapons
		for(int i = 0; i < GunBase.GUNS.size(); i++)
		{
			GunBase gun = GunBase.GUNS.get(i);
			location = new ModelResourceLocation(gun.getRegistryName(), "inventory");
			main = e.getModelRegistry().getObject(location);
			e.getModelRegistry().putObject(location, new BakedModelGun());
		}
	}

 

 

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.

Announcements



×
×
  • Create New...

Important Information

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