Jump to content

Recommended Posts

  • Replies 54
  • Created
  • Last Reply

Top Posters In This Topic

Posted

Is it possible to cancel the rendering of only the item in one Hand during 'RenderHandEvent'/are there also events that get fired for each Hand independently?

 

If not, is there a reliable way to render the item in a hand?

Posted

Isn't there a different way to just precent the rendering of my items so that I can render them myself? I would have to change the entire rendering and model system of the mod...

Posted

Why was IItemRenderer removed?

The mod that I'm working on is FlansMod. I want to update it to 1.10 but it has it's own way of rendering things and the models and animations of all weapons and vehicles are made with this system. It's probably not possible to implement IModel / IBakedModel to this...

Posted

Ok. This means I will use the new system.

 

I still don't exactly understand how IModel and IBakedModel are implemented. I can try to explain how the current Model system works, maybe you know how I could implement it.

 

This is a (very simplified) schematic where I try to explain how it works:

tJk2Qmj.png

 

This is for example what the Model class of a gun looks like:

[spoiler=ModelM9.java]


public class ModelM9 extends ModelGun 
{
public ModelM9()
{
	int textureX = 32;
	int textureY = 16;

	gunModel = new ModelRendererTurbo[3];

	gunModel[0] = new ModelRendererTurbo(this, 0, 0, textureX, textureY);
	gunModel[0].addBox(-1F, -2F, -1F, 3, 4, 2);

	gunModel[1] = new ModelRendererTurbo(this, 0, 6, textureX, textureY);
	gunModel[1].addBox(-1F, 2F, -1F, 8, 1, 2);

	gunModel[2] = new ModelRendererTurbo(this, 0, 9, textureX, textureY);
	gunModel[2].addBox(-0.5F, 3.5F, -0.5F, 8, 1, 1);

	slideModel = new ModelRendererTurbo[3];

	slideModel[0] = new ModelRendererTurbo(this, 0, 12, textureX, textureY);
	slideModel[0].addBox(-1F, 3F, -1F, 8, 2, 2);

	slideModel[1] = new ModelRendererTurbo(this, 10, 2, textureX, textureY);
	slideModel[1].addBox(5.95F, 4.5F, -0.5F, 1, 1, 1);

	slideModel[2] = new ModelRendererTurbo(this, 8, 0, textureX, textureY);
	slideModel[2].addBox(-0.8F, 4.5F, -0.5F, 1, 1, 1);

	ammoModel = new ModelRendererTurbo[1];

	ammoModel[0] = new ModelRendererTurbo(this, 14, 0, textureX, textureY);
	ammoModel[0].addBox(-0.5F, -1.8F, -0.5F, 2, 4, 1);

	barrelAttachPoint = new Vector3f(7.5F / 16F, 4F / 16F, 0F);

	scopeAttachPoint = new Vector3f(3F / 16F, 5F / 16F, 0F);
	scopeIsOnSlide = true;

	gunSlideDistance = 0.25F;
	animationType = EnumAnimationType.PISTOL_CLIP;
}
}

 

 

Here's the source of the mod: https://github.com/gitgud-software/FlansMod

(changes to the mod made by me are not yet committed, but I can commit them if you need the code; I fixed the compiler errors and started fixing bugs)

 

 

Posted

My ModelGun would have to implement IModel and then I would have to make a BakedGunModel (implements IPerspectiveAwareModel) class? How do I then "connect" that BakedModel with the item?

 

Posted

The mod adds many different items for which I need different ICustomModelLoaders. How should I determine whether or not the ICustomLoader accepts it when I just have a ResourceLocation?

 

Edit: nvm. that was a stupid question. I can just add a folder called guns in assets/flansmod/models/item right?

Posted

I'm not sure if it's possible to use the same format for each kind of item... Guns should consist of multiple parts that will have to be moved independently during reloading-animations and so on, but Plane-Models, for example, have other properties...

Posted

Hm ok.

What file-format would you suggest? I can't use a simple .obj-file because the file has to store multiple "sub-objects" (IModelPart) and also other information (for example points where gun attachments/upgrades should be placed).

Should I use a .zip-file that contains .obj files? That would make it possible to edit the model with 3d-programs.

Posted

Do you think it's ok to just have one ICustomModelLoader, store what kind of IModel it describes in the model file and then make the ICustomModelLoader load/instantiate the IModel accordingly?

 

Also what textures do I have to return in getTextures() of IModel and where should I get them from? I mean, aren't textures stored separately?

Posted

What about my second question: what textures do I have to return in getTextures() of IModel and where should I get them from? I mean, aren't textures stored separately?

Posted

How do I make the BakedQuads for the getQuads method in IBakedModel? And can I change the IBakedModel during runtime for things like animations?

Posted

Currently the mods stores things like attachments and paintjobs in the ItemStack (as NBT data). Is there a way to get the NBT data during baking? If not: How would I implement attachments and paintjobs?

Posted

I have two more questions:

  • Why is ICustomModelLoader::loadModel called twice for every item?
  • How can I make the Item render in the vanilla way when it's in the inventory/GUIs?

This is what I tried to do in my IPerspectiveAwareModel:

     @Override
    public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
        switch (cameraTransformType) {
            case GUI:
                return Pair.of(Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getModel(new ModelResourceLocation(resourceLocation, null)), null);
        }

        return Pair.of(this, null);
    }

 

The result is just a purple-black square. How can I specify the texture correctly?

Posted

With normal, I mean a "2D-Item". The way almost all Items in the game are rendered. I also tried ModelResourceLocation(resourceLocation, "inventory") and ModelResourceLocation(resourceLocation, "normal") (which is the same as ModelResourceLocation(resourceLocation, null)) with the same outcome.

Posted

The normal "2D-Item" model is defined in "item/handheld.json". If you want a textured variant of this model, load it using

ModelLoaderRegistry.getModel(new ResourceLocation("item/handheld"))

, cast to

IRetexturableModel

and retexture it to use whichever texture you want (make sure the texture is loaded, if need be via

TextureStitchEvent

). The base texture for this item model is called "layer0", so you'd do

IRetexturableModel::retexture(ImmutableMap.of("layer0", <myTexture>))

.

You can then bake the resulting

IModel

.

 

I think you mean

builtin/generated

or

item/generated

.

builtin/generated

is the base 2D-style model,

item/generated

extends this and defines the standard display transformations. Most basic item models extend

item/generated

.

 

item/handheld

extends

item/generated

and redefines the first/third-person display transformations to change how the item renders when held by an entity. Vanilla tool models extend this.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

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.