Texture dans TileEntityRender



  • bonjour la texture de mon tuyaux ne s'affiche pas, normalement on devrait la voir d'un coté mais elle n'y est pas du tout dans les logs sa m'affiche

    [Client thread/ERROR]: Using missing texture, unable to load minecraft:textures/blocks/MISSING_ICON_BLOCK_166_blockPipe.png

    java.io.FileNotFoundException: minecraft:textures/blocks/MISSING_ICON_BLOCK_166_blockPipe.png

    la classe principale :

    ​package com.bowser.robotic.common;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    import com.bowser.robotic.proxy.CommonProxy;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.network.NetworkRegistry;
    import cpw.mods.fml.common.registry.GameRegistry;
    
    @Mod(modid = "roboticmod", name = "Mod Robotic", version = "1.0.0")
    
    public class Robotic
    {
    
    public static final String modid = "roboticmod";
    
        @Instance("roboticmod")
        public static Robotic instance;
    
        @SidedProxy(clientSide = "com.bowser.robotic.proxy.ClientProxy", serverSide = "com.bowser.robotic.proxy.CommonProxy")
        public static CommonProxy proxy;
    
        //blocks
        public static Block cuivreOre;
        public static Block blockCable;
        public static Block boisResine;
        public static Block feuillesResine;
        public static Block pousseResine;
    
        //items
        public static Item copperIngot;
    
        @EventHandler
        public void preInit(FMLPreInitializationEvent event)
        {
            //Blocks
            cuivreOre = new OreCuivre(Material.rock).setBlockName("cuivreore").setBlockTextureName("roboticmod:orecuivre").setCreativeTab(CreativeTabs.tabBlock).setHardness(3.0F).setResistance(5.0F);
            GameRegistry.registerBlock(cuivreOre, "block_cuivre");
    
            blockCable = new BlockElectricCable().setBlockName("blockPipe").setCreativeTab(CreativeTabs.tabBlock);
            GameRegistry.registerBlock(blockCable, "block_cable");
    
            boisResine = new BoisResine().setBlockTextureName("roboticmod:resine_bois").setBlockName("resine_bois");
            feuillesResine = new FeuillesResine().setBlockTextureName("roboticmod:feuilles").setBlockName("resine_feuilles"); 
            pousseResine = new PousseResine().setBlockTextureName("roboticmod:pousse").setBlockName("resine_pousse");
    
            GameRegistry.registerBlock(boisResine , "resine_bois");
            GameRegistry.registerBlock(feuillesResine , "resine_feuilles");
            GameRegistry.registerBlock(pousseResine, "resine_pousse");
    
            //items
            copperIngot = new CopperIngot().setUnlocalizedName("copperingot").setTextureName("roboticmod:copperingot").setCreativeTab(CreativeTabs.tabMaterials);
            GameRegistry.registerItem(copperIngot, "copper_ingot");
    
            //recipe furnace basic
            GameRegistry.addSmelting(cuivreOre, new ItemStack(copperIngot, 1), 0f);
        }
    
        @EventHandler
        public void init(FMLInitializationEvent event)
        {
            proxy.registerRender();
    
            //generator
            GameRegistry.registerWorldGenerator(new WorldGeneratorCopper(), 0);
            GameRegistry.registerWorldGenerator(new WorldGeneration(), 0);
    
            GameRegistry.registerTileEntity(TileEntityPipe.class, "Pipe");
        }
    
        @EventHandler
        public void postInit(FMLPostInitializationEvent event)
        {
    
        }
    }
    

    tileentity :

    ​package com.bowser.robotic.proxy;
    
    import org.lwjgl.opengl.GL11;
    
    import com.bowser.robotic.common.Robotic;
    
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    import com.bowser.robotic.common.Robotic;
    
    public class TileEntityRenderPipe extends TileEntitySpecialRenderer
    {
    
        ResourceLocation texture = new ResourceLocation("roboticmod:textures/models/pipe.png"); //(Robotic.modid, "textures/models/pipe.png")
        float pixel = 1F/16F;
        float texturePixel = 1F/32F;
    
        @Override
        public void renderTileEntityAt(TileEntity tileentity, double translationX, double translationY, double translationZ, float f)
        {
           //System.out.println("YOLO"); 
            GL11.glTranslated(translationX, translationY, translationZ);
            this.bindTexture(texture);
            drawCore(tileentity);
        }
    
        public void drawCore(TileEntity tileentity) {
            Tessellator tessellator = Tessellator.instance;
            tessellator.startDrawingQuads();
            {
            tessellator.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texturePixel, 5*texturePixel);
            tessellator.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texturePixel, 0*texturePixel);
            tessellator.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texturePixel, 0*texturePixel);
            tessellator.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texturePixel, 5*texturePixel);
            }
            tessellator.draw();
        }
    
    }
    

    la classe du bloc :

    ​package com.bowser.robotic.common;
    
    import net.minecraft.block.BlockContainer;
    import net.minecraft.block.material.Material;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.world.World;
    
    public class BlockElectricCable extends BlockContainer
    {
    
        protected BlockElectricCable()
        {
            super(Material.ground);
            this.useNeighborBrightness=true;
    
        }
    
        public int getRenderType() {
            return -1; 
        }
    
        public boolean isOpaqueCube() {
            return false;
        }
    
        public boolean renderAsNormalBlock(){
            return false;
        }
    
        @Override
        public TileEntity createNewTileEntity(World world, int i)
        {
            return new TileEntityPipe();
        }
    
    }
    

  • Administrateurs

    Tu as mit ou la texture ?
    Aussi, il devrait avoir GL11.glPushMatrix(); au début de la fonction renderTileEntityAt et  GL11.glPopMatrix(); à la fin.



  • la texture se trouve dans src\main\resources\assets\roboticmod\textures\models au cas ou je l'avait mis aussi dans blocks mais sa ne change rien

    et pour GL11.glPushMatrix(); et PopMatrix sa doit donner sa ?

    ​    @Override
    
        public void renderTileEntityAt(TileEntity tileentity, double translationX, double translationY, double translationZ, float f)
        {
            GL11.glPushMatrix();
            GL11.glTranslated(translationX, translationY, translationZ);
            this.bindTexture(texture);
            drawCore(tileentity);
            GL11.glPopMatrix();
        }
    

    en lisant bien ce qu'il ne trouve pas c'est une texture pour l'icone du bloc en main donc en donnant une texture au bloc dans la classe principale plus d'erreur de texture manquante, mais peu importe le nom du fichier que je met dans le TileEntityRender aucun message de texture manquante ou autre mais aucune texture j'ai du mal a comprendre ce qu'il se passe


  • Administrateurs

    En effet, elle est bien au bon endroit, je ne vois pas non plus pourquoi ça ne fonctionne pas 😕



  • sinon je continue le tuto et je vois ce qui se passe



  • As-tu du nouveau ? Car cela m'intéresse : j'ai le même problème  😞



  • Je n'aime pas up mais là ça presse vraiment donc si quelqu'un a la réponse aidez moi voici ma class :

    mon tesr :

    
    package mrplaigon.psccraft.minesagasmod.client;
    
    import mrplaigon.psccraft.minesagasmod.common.TileEntityBlockHayner;
    import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    
    import org.jglrxavpok.glutils.TessellatorModel;
    import org.lwjgl.opengl.GL11;
    
    public class TileEntityHaynerSpecialRenderer
      extends TileEntitySpecialRenderer
      implements IInventoryRenderer
    {
    
     private static TessellatorModel glmodel0;//tête
     private static final ResourceLocation textureLocation0 = new ResourceLocation(
     "minesagasmod:obj/hayner0.png");
    
     private static TessellatorModel glmodel1;//cheveux
     private static final ResourceLocation textureLocation1 = new ResourceLocation(
    "minesagasmod:obj/hayner1.png");
    
     private static TessellatorModel glmodel2;//corps
     public static final ResourceLocation textureLocation2 = new ResourceLocation(
    "minesagasmod", "obj/hayner1.png");//"minesagasmod:obj/hayner2.png");
     //public static final ResourceLocation textureLocation = new ResourceLocation("cwm", "textures/blocks/legendary_stone_ground.png");
    
      public TileEntityHaynerSpecialRenderer()
      {
        this.glmodel0 = new TessellatorModel("/assets/minesagasmod/obj/hayner0.obj");
        this.glmodel0.regenerateNormals();
    
        this.glmodel1 = new TessellatorModel("/assets/minesagasmod/obj/hayner1.obj");
        this.glmodel1.regenerateNormals();
    
        this.glmodel2 = new TessellatorModel("/assets/minesagasmod/obj/hayner2.obj");
        this.glmodel2.regenerateNormals();
      }
    
      public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float scale)
      {
        //renderTileEntityTestAt((TileEntityBlockHayner)tileentity, x, y, z, scale);
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        this.bindTexture(textureLocation0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel0.render();   
        GL11.glPopMatrix();
        //GL11.glShadeModel(7425);
    
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        this.bindTexture(textureLocation1);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel1.render();   
        GL11.glPopMatrix();
       // GL11.glShadeModel(7425);
    
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        this.bindTexture(textureLocation2);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel2.render();  
        GL11.glPopMatrix();
        //GL11.glShadeModel(7425);
    
      }
    
      public void renderInventory(double x, double y, double z) 
      {
    
      }
    }
    
    

    La texture se trouve bien dans assets/minesagasmod/obj/



  • Essaye de créer ta ResourceLocation avec 2 arguments : le MODID et le chemin

    ​new ResourceLocation(MODID, "/textures/models …")
    

  • Modérateurs

    @'Julot10085':

    Je n'aime pas up mais là ça presse vraiment donc si quelqu'un a la réponse aidez moi voici ma class :

    mon tesr :

    
    package mrplaigon.psccraft.minesagasmod.client;
    
    import mrplaigon.psccraft.minesagasmod.common.TileEntityBlockHayner;
    import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    
    import org.jglrxavpok.glutils.TessellatorModel;
    import org.lwjgl.opengl.GL11;
    
    public class TileEntityHaynerSpecialRenderer
      extends TileEntitySpecialRenderer
      implements IInventoryRenderer
    {
    
     private static TessellatorModel glmodel0;//tête
     private static final ResourceLocation textureLocation0 = new ResourceLocation(
     "minesagasmod:obj/hayner0.png");
     
     private static TessellatorModel glmodel1;//cheveux
     private static final ResourceLocation textureLocation1 = new ResourceLocation(
    "minesagasmod:obj/hayner1.png");
     
     private static TessellatorModel glmodel2;//corps
     public static final ResourceLocation textureLocation2 = new ResourceLocation(
    "minesagasmod", "obj/hayner1.png");//"minesagasmod:obj/hayner2.png");
     //public static final ResourceLocation textureLocation = new ResourceLocation("cwm", "textures/blocks/legendary_stone_ground.png");
      
      public TileEntityHaynerSpecialRenderer()
      {
        this.glmodel0 = new TessellatorModel("/assets/minesagasmod/obj/hayner0.obj");
        this.glmodel0.regenerateNormals();
        
        this.glmodel1 = new TessellatorModel("/assets/minesagasmod/obj/hayner1.obj");
        this.glmodel1.regenerateNormals();
        
        this.glmodel2 = new TessellatorModel("/assets/minesagasmod/obj/hayner2.obj");
        this.glmodel2.regenerateNormals();
      }
      
      
       
      public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float scale)
      {
        //renderTileEntityTestAt((TileEntityBlockHayner)tileentity, x, y, z, scale);
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        this.bindTexture(textureLocation0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel0.render();   
        GL11.glPopMatrix();
        //GL11.glShadeModel(7425);
        
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        this.bindTexture(textureLocation1);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel1.render();   
        GL11.glPopMatrix();
       // GL11.glShadeModel(7425);
        
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        this.bindTexture(textureLocation2);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel2.render();  
        GL11.glPopMatrix();
        //GL11.glShadeModel(7425);
        
      }
      
    
      public void renderInventory(double x, double y, double z) 
      {
    
      }
    }
    

    La texture se trouve bien dans assets/minesagasmod/obj/

    Dans ce cas là, c'est le .mtl fourni avec le .obj qui gère la texture, rien à voir avec les ResourceLocation, et la texture est bind toute seule.



  • @'jglrxavpok':

    @'Julot10085':

    Je n'aime pas up mais là ça presse vraiment donc si quelqu'un a la réponse aidez moi voici ma class :

    mon tesr :

    
    package mrplaigon.psccraft.minesagasmod.client;
    
    import mrplaigon.psccraft.minesagasmod.common.TileEntityBlockHayner;
    import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    
    import org.jglrxavpok.glutils.TessellatorModel;
    import org.lwjgl.opengl.GL11;
    
    public class TileEntityHaynerSpecialRenderer
      extends TileEntitySpecialRenderer
      implements IInventoryRenderer
    {
    
     private static TessellatorModel glmodel0;//tête
     private static final ResourceLocation textureLocation0 = new ResourceLocation(
     "minesagasmod:obj/hayner0.png");
     
     private static TessellatorModel glmodel1;//cheveux
     private static final ResourceLocation textureLocation1 = new ResourceLocation(
    "minesagasmod:obj/hayner1.png");
     
     private static TessellatorModel glmodel2;//corps
     public static final ResourceLocation textureLocation2 = new ResourceLocation(
    "minesagasmod", "obj/hayner1.png");//"minesagasmod:obj/hayner2.png");
     //public static final ResourceLocation textureLocation = new ResourceLocation("cwm", "textures/blocks/legendary_stone_ground.png");
      
      public TileEntityHaynerSpecialRenderer()
      {
        this.glmodel0 = new TessellatorModel("/assets/minesagasmod/obj/hayner0.obj");
        this.glmodel0.regenerateNormals();
        
        this.glmodel1 = new TessellatorModel("/assets/minesagasmod/obj/hayner1.obj");
        this.glmodel1.regenerateNormals();
        
        this.glmodel2 = new TessellatorModel("/assets/minesagasmod/obj/hayner2.obj");
        this.glmodel2.regenerateNormals();
      }
      
      
       
      public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float scale)
      {
        //renderTileEntityTestAt((TileEntityBlockHayner)tileentity, x, y, z, scale);
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        this.bindTexture(textureLocation0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel0.render();   
        GL11.glPopMatrix();
        //GL11.glShadeModel(7425);
        
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        this.bindTexture(textureLocation1);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel1.render();   
        GL11.glPopMatrix();
       // GL11.glShadeModel(7425);
        
        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5D, y , z + 0.5D);
        this.bindTexture(textureLocation2);
        //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0);
        GL11.glScaled(0.011D, 0.0071D, 0.01D);
        this.glmodel2.render();  
        GL11.glPopMatrix();
        //GL11.glShadeModel(7425);
        
      }
      
    
      public void renderInventory(double x, double y, double z) 
      {
    
      }
    }
    

    La texture se trouve bien dans assets/minesagasmod/obj/

    Dans ce cas là, c'est le .mtl fourni avec le .obj qui gère la texture, rien à voir avec les ResourceLocation, et la texture est bind toute seule.

    Ca je le sais très bien mais comme je l'ai dis sur ton post GLUtils je souhaite passer par du code et non par des fichiers .mtl  comme l'a fait Gugu42 pour son mod Ratchet And Clank. J'ai regardé son github sur sa TESR de son block vendor  (https://github.com/Gugu42/RatchetAndClankMod/tree/master/java) et il faisait comme ça.

    Alors là je suis en train de modifier 2, 3 petites choses du genre passer plutôt par un IModelCustom plutôt que par un TessellatorModel comme l'a fait lui. Peut être que l'erreur est due à ça?



  • Bon bah j'ai découvert mon erreur tout seul : c'était le fait que je passe par un TesselatorModel et non par un IModelCustomn qui causait ceci. Jer ne sais pas pourquoi je n'y ai pas pensé plutôt. En tout cas merci à vos réponses, tout de même.



  • je suis un peu en retard par rapport a toutes ces réponses, je n'ai pas eu le temps de continuer pour le cable mais sinon je n'ai toujours pas trouvé de solutions a cette texture qui ne s'affiche pas 
    je viens de penser que j'ai tout mis sur Github :
    https://github.com/Bowser338/Robotic
    sa vous aidera peut être a trouver la source du problème
    je vais quand meme continuer et je vous tient au courant



  • je suis un peu en retard par rapport a toutes ces réponses, je n'ai pas eu le temps de continuer pour le cable mais sinon je n'ai toujours pas trouvé de solutions a cette texture qui ne s'affiche pas

    Je viens de penser a une autre maniere de creer mon cable c'est possible de faire sa avec des models techne ?



  • si c'est un block en forme de cable il va falloir passer par un rendu tesr. sauf que tu n'a pas a faire la partie avec les rotatation



  • Oui
    j'ai eu une idée 
    j'ai creer mon cable dans techne il est constitué de 7 parties :

    le coeur ( un cube au centre ) qui s'affiche tout le temps
    segment de droite qui s'affiche quand il y a un autre cable a droite
    segment de gauche qui s'affiche quand il y a un autre cable a gauche
    segment de devant qui s'affiche quand il y a un autre cable devant
    segment de derrière qui s'affiche quand il y a un autre cable derrière
    segment de haut qui s'affiche quand il y a un autre cable en haut
    segment de bas qui s'affiche quand il y a un autre cable a gauche

    sa pourrait marcher ?



  • vu comme sa j'ai du mal a comprendre c'est si un cable est a coté il ya un morceau qui apparait?

    si besoin utilise l'open source de buildcraft:
    open source buildcraft
    ou la classe redstone
    mais je pense que pour faire un bloc qui change de forme c'est different



  • En gros la j'ai un seul bloc techne avec 7 parties le coeur et les connexions

    et si il y a un bloc a coter sa affiche la branche correspondante pour faire la connexion

    ( je comprends rien aux sources de Buildcraft 😕 deja essayer pleins de fois )


  • Modérateurs

    @'Bowser338':

    Oui
    j'ai eu une idée 
    j'ai creer mon cable dans techne il est constitué de 7 parties :

    le coeur ( un cube au centre ) qui s'affiche tout le temps
    segment de droite qui s'affiche quand il y a un autre cable a droite
    segment de gauche qui s'affiche quand il y a un autre cable a gauche
    segment de devant qui s'affiche quand il y a un autre cable devant
    segment de derrière qui s'affiche quand il y a un autre cable derrière
    segment de haut qui s'affiche quand il y a un autre cable en haut
    segment de bas qui s'affiche quand il y a un autre cable a gauche

    sa pourrait marcher ?

    Je pense que ça pourrait marcher. Mais tu va devoir gérer plein de cas différents, fais attention.



  • Bah ce que j'ai trouver je n'arrive pas avoir de texture donc je cherche un autre moyen



  • Je n'arrive pas a avoir de textures donc je cherche un autre moyen

    Quelqu'un saurait comment faire pour cacher un shape ?