Rendre une partie d'un mob invisible



  • Bonjours, j'ai créer une nouvelle vache pour mon mod et le but est de la faire grossir ou maigrir.
    Le problème c'est que je ne sais pas du tout par ou mis prendre et malgré une semaine a fouiller les codes de minecraft je n'ais pas compris comment ils marchent.
    Je crois que c'est un changement de texture.

    Ma classe render : ( j'ai utilisé la texture du mouton en deuxième texture le temps des tests )

    
    public class RenderVache extends RenderLiving {
    
    private ModelVache Render = new ModelVache();
    private static final ResourceLocation shearedSheepTextures = new ResourceLocation("textures/entity/sheep/sheep.png");
    private static final ResourceLocation texturevache1 = new ResourceLocation(Main.MODID, "textures/entity/mob_vache.png");
    
    public RenderVache(ModelVache RenderVache, float par2)
    {
    super(new ModelVache(), 0.5F);
    }
    
    /**
    * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
    */
    protected ResourceLocation getEntityTexture(MobVache par1MobVache)
    {
    return shearedSheepTextures;
    }
    
    /**
    * Queries whether should render the specified pass or not.
    */
    protected int shouldRenderPass(MobVache par1MobVache, int par2, float par3)
    {
    if (par2 == 0 && !par1MobVache.isfat())
    {
    this.bindTexture(texturevache1);
    return 1;
    }
    else
    {
    return -1;
    }
    }
    
    @Override
    protected ResourceLocation getEntityTexture(Entity var1) {
    return texturevache1;
    }
    }
    

    Voila j'ai un peu pompé le code minecraft du mouton mais je ne vois pas comment changer la texture in game, dans la classe de mon mob j'ai essayé d'appeller la fonction quand on clic sur le mob mais sans réussite.

    public boolean interact(EntityPlayer par1EntityPlayer)
    {
    ItemStack itemstack = par1EntityPlayer.inventory.getCurrentItem();
    
    if (itemstack != null && this.isBreedingItem(itemstack))
    {
    –itemstack.stackSize;
    this.shouldRenderInPass(0);
    return true;
    }
    else
    {
    return super.interact(par1EntityPlayer);
    }
    }
    

    Merci de m'avoir lu.


  • Administrateurs

    Plutôt que de faire apparaître / disparaître des morceaux du modèle, ça ne serait pas plus simple de réduire / augmenter la tailler ?
    Car c'est facilement faisable avec un GL11.glScale(…).
    Après tu fais une variable dans l'entité de la vache que tu augmente lorsqu'on nourri la vache, et du adapte le glScale en fonction de cette variable.


  • Modérateurs

    Dans ce cas là, il faut un nouveau type de Render uniquement pour cette vache.



  • J'ai quelque petit problème avec GL11, quand j'utilise une fonction comme GL11.glColor3f(…) ou GL11.glscale(...), j'ai une erreur :

    
    java.lang.RuntimeException: No OpenGL context found in the current thread.
    at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
    at org.lwjgl.opengl.GL11.glColor3f(GL11.java:859)
    .....
    
    

    De plus je n'arrive pas a trouver quand est appeler la fonction : ( dans le cas du mouton )

    
    protected int shouldRenderPass(EntitySheep par1EntitySheep, int par2, float par3)
    {
    if (par2 == 0 && !par1EntitySheep.getSheared())
    {
    this.bindTexture(sheepTextures);
    int j = par1EntitySheep.getFleeceColor();
    GL11.glColor3f(EntitySheep.fleeceColorTable[j][0], EntitySheep.fleeceColorTable[j][1], EntitySheep.fleeceColorTable[j][2]);
    return 1;
    }
    else
    {
    return -1;
    }
    }
    
    

Log in to reply