Curios icon indicating copy to clipboard operation
Curios copied to clipboard

[Forge 1.20.1][Help/Question] Rendering Item Json Models On Player

Open TheLightmare opened this issue 2 years ago • 3 comments

my objective

I want to make a sword i made render in the back of the player when placed in the dedicated slot.

problem

The ICuriosRenderer class doesn't allow for layers, which in the vanilla code are used to render items on entities.

things i tried

making an entity model exactly identical to the item, but since the sword is made of details that are smaller than 1 pixel, the textures are messed up

i looked up every example i could find, but none of them did anything close to what i want to do. So any help is very welcome !

TheLightmare avatar Sep 30 '23 08:09 TheLightmare

The ICuriosRenderer class doesn't allow for layers, which in the vanilla code are used to render items on entities.

I'm not sure what you mean by that. It doesn't allow for layers because it is itself called within another layer, CuriosLayer, defined by Curios natively.

Can you give an example? Or better, can you share your current rendering code and I can maybe see how it can be converted to the necessary code blocks?

TheIllusiveC4 avatar Oct 01 '23 04:10 TheIllusiveC4

The idea is to render a json model instead of a Java class model (sorry i should have said that from the start). So for now i basically used the example code to render a model class :

public class GrashwandirCurioRenderer<L extends LivingEntity> implements ICurioRenderer {

    private static final ResourceLocation GRASHWANDIR_TEXTURE = new ResourceLocation(GrashwandirMod.MODID,
            "textures/item/grashwandir.png");
    private final GrashwandirBackModel model;

    public GrashwandirCurioRenderer() {
        this.model = new GrashwandirBackModel(
                Minecraft.getInstance().getEntityModels().bakeLayer(CuriosLayerDefinitions.GRASHWANDIR));
    }


    @Override
    public <T extends LivingEntity, M extends EntityModel<T>> void render(ItemStack stack,
                                                                          SlotContext slotContext,
                                                                          PoseStack matrixStack,
                                                                          RenderLayerParent<T, M> renderLayerParent,
                                                                          MultiBufferSource renderTypeBuffer,
                                                                          int light, float limbSwing,
                                                                          float limbSwingAmount,
                                                                          float partialTicks,
                                                                          float ageInTicks,
                                                                          float netHeadYaw,
                                                                          float headPitch) {
        // Render Grashwandir on the back of the player

        LivingEntity entity = slotContext.entity();

        this.model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks);

        this.model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch);

        ICurioRenderer.followBodyRotations(entity, this.model);

        VertexConsumer vertexconsumer = ItemRenderer
                .getArmorFoilBuffer(renderTypeBuffer, RenderType.armorCutoutNoCull(GRASHWANDIR_TEXTURE), false,
                        stack.hasFoil());
        this.model
                .renderToBuffer(matrixStack, vertexconsumer, light, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F,
                        1.0F, 1.0F);
    }

TheLightmare avatar Oct 01 '23 07:10 TheLightmare

Is that not adequate for your needs?

How would you render the JSON model normally (outside of Curios)?

TheIllusiveC4 avatar Oct 01 '23 20:10 TheIllusiveC4