Porte Multi Texture



  • Hello tout le monde,

    Alors Voila je rencontre un petit probleme durant la creation d'une porte avec plusieur textures.

    je m'explique je voudrait cree une porte qui a une texture qui change en fonction du bloc qui se trouve en dessous, le probleme c'est que le jeu ne trouve pas mes texture j'ai du me fail quelque part dans le code ^^:

    public class PorteSecrete extends BlockDoor 
    {
    
    private IIcon Sand;
    private IIcon Coble;
    private IIcon Normal;
    
    public PorteSecrete(int i,Material material) 
    {
    super(material); 
    this.setHardness(3.0F);
        this.setResistance(5.0F);
        this.disableStats();
    
    }
    
    public void registerIcons(IIconRegister iconRegister)
    {
    Sand = iconRegister.registerIcon(LaFrenchCraftMOD.MODID + ":sand");
    Coble = iconRegister.registerIcon(LaFrenchCraftMOD.MODID + ":coble");
    Normal = iconRegister.registerIcon(LaFrenchCraftMOD.MODID + ":normal");
    }
    
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(World world,int x, int y, int z,int side, int metadata)
           {
    if (world.getBlock(x, y - 1, z) == Blocks.sand)
                     {
                      return Sand;
                     }
    else if(world.getBlock(x, y - 1, z) == Blocks.cobblestone)
                     {
                      return Coble;
                     }
    return Normal;
    }
    
    @Override
       public Item getItemDropped(int par1, Random rand, int par3)
       {
           return LaFrenchCraftMOD.ItemPS;
       }
    
       @Override
       @SideOnly(Side.CLIENT)
       public Item getItem(World world, int x, int y, int z)
       {
           return LaFrenchCraftMOD.ItemPS;
       }
    
       @Override
       public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
       {
           int i1 = this.func_150012_g(world, x, y, z);
           int j1 = i1 & 7;
           j1 ^= 4;
    //ouvre la porte
           if ((i1 & 8) == 0)
           {
               world.setBlockMetadataWithNotify(x, y, z, j1, 2);
               world.markBlockRangeForRenderUpdate(x, y, z, x, y, z);
           }
           else
           {
               world.setBlockMetadataWithNotify(x, y - 1, z, j1, 2);
               world.markBlockRangeForRenderUpdate(x, y - 1, z, x, y, z);
           }
           //joue le son
           world.playAuxSFXAtEntity(player, 1003, x, y, z, 0);
    
           return true;
       }
    
    }
    
    

    mes textures portent le nom de sand_lower, sand_upper, coble_lower, coble_upper, normal_lower, normal_upper

    J'ai regarder dans les logs et le jeu cherche les texture null_lower.png et null_upper.png

    [14:25:21] [Client thread/ERROR]: Using missing texture, unable to load minecraft:textures/blocks/MISSING_ICON_BLOCK_196_null_lower.png
    

  • Administrateurs

    Surement car la fonction public IIcon getIcon(World world,int x, int y, int z,int side, int metadata) n'existe pas. Il me semble que c'est comme ça :
    public IIcon getIcon(World world,int x, int y, int z, int side)
    Après si tu veux faire une porte secrète il y a beaucoup plus simple :

    public IIcon getIcon(World world,int x, int y, int z, int side)
    {
       return world.getBlock(x, y - 1, z).getIcon(world, x, y - 1, z, side);
    }
    


  • @'robin4002':

    Surement car la fonction public IIcon getIcon(World world,int x, int y, int z,int side, int metadata) n'existe pas. Il me semble que c'est comme ça :
    public IIcon getIcon(World world,int x, int y, int z, int side)
    Après si tu veux faire une porte secrète il y a beaucoup plus simple :

    public IIcon getIcon(World world,int x, int y, int z, int side)
    {
       return world.getBlock(x, y - 1, z).getIcon(world, x, y - 1, z, side);
    }
    

    J'ai Mis Ta fonction mais il n'y a toujour aucune texture :s je te redonne le code :

    public class PorteSecrete extends BlockDoor 
    {
    
    public PorteSecrete(int i,Material material) 
    {
    super(material); 
    this.setHardness(3.0F);
        this.setResistance(5.0F);
        this.disableStats();
    
    }
    
    public IIcon getIcon(World world,int x, int y, int z, int side)
    {
      return world.getBlock(x, y - 1, z).getIcon(world, x, y - 1, z, side);
    }
    
    @Override
       public Item getItemDropped(int par1, Random rand, int par3)
       {
           return LaFrenchCraftMOD.ItemPS;
       }
    
       @Override
       @SideOnly(Side.CLIENT)
       public Item getItem(World world, int x, int y, int z)
       {
           return LaFrenchCraftMOD.ItemPS;
       }
    
       @Override
       public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
       {
           int i1 = this.func_150012_g(world, x, y, z);
           int j1 = i1 & 7;
           j1 ^= 4;
    //ouvre la porte
           if ((i1 & 8) == 0)
           {
               world.setBlockMetadataWithNotify(x, y, z, j1, 2);
               world.markBlockRangeForRenderUpdate(x, y, z, x, y, z);
           }
           else
           {
               world.setBlockMetadataWithNotify(x, y - 1, z, j1, 2);
               world.markBlockRangeForRenderUpdate(x, y - 1, z, x, y, z);
           }
           //joue le son
           world.playAuxSFXAtEntity(player, 1003, x, y, z, 0);
    
           return true;
       }
    
    }
    
    

  • Administrateurs

    Ah c'est parce que c'est IBlockAccess le bon argument et non world :

    public IIcon getIcon(IBlockAccess world,int x, int y, int z, int side)
    {
    return world.getBlock(x, y - 1, z).getIcon(world, x, y - 1, z, side);
    }
    


  • @'robin4002':

    Ah c'est parce que c'est IBlockAccess le bon argument et non world :

    public IIcon getIcon(IBlockAccess world,int x, int y, int z, int side)
    {
      return world.getBlock(x, y - 1, z).getIcon(world, x, y - 1, z, side);
    }
    

    Merci Robin, c'est exactement se que je voulais faire. 
    🙂