Texture de trappe orientable



  • Bonjour à tous, votre humble sventus revient pour de nouvelles aventures.

    je suis actuellement dans un mini projet consistant à creer une trappe, le seul souci est que cette trappe doit prendre la texture du bloc sur laquelle elle est posée.

    je comprend que le problème doit comporter la direction puisque cette dite trappe ne marche que pour une seule des quatre directions. j'aimerais donc savoir comment intégrer ce principe dans cette petite class.

    je vous post ce petit code :

    http://pastebin.com/KqhJ4gid

    si vous avez des solutions, je vous en serais très reconnaissant.

    cordialement,
    un Sventus sauvage.



  • Il faut que tu récupères la meta data du block (qui contient la direction) avec world.getBlockMetadata(x, y, z); et selon celle-ci, tu donnes la texture. Pour savoir à quelle direction correspond chaque meta data, regarde dans la classe BlockTrapDoor.



  • Bonjour,
    merci de ta réponse, juste une chose.

    Tu parles de la fonction :onBlockPlaced ?



  • public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) {}



  • merci plaigon, donc j'avais trouvé la bonne fonction, les noms ont été remplacés pour mieux voir, mais je vois pas ou mettre

    "world.getBlockMetadata(x, y, z);" …



  • Il ne faut pas utiliser onBlockAdded car ta superclasse (le extends) BlockTrapDoor le gère déjà, donc il faut que tu get la méta data dans getIcon pour savoir l'orientation qu'à enregistré BlockTrapDoor dans sa fonction onBlockAdded.



  • c'est honteux je sais,  j'ai essayé quelque chose comme ça, sans succès :

    
    if (world.getBlockMetadata(x, y, z) == 2)
    {
    world.getBlock(x - 1, y, z).getIcon(world, x - 1, y, z, side);
    }
    
    if (world.getBlockMetadata(x, y, z) == 3)
    {
    world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side);
    }
    
    if (world.getBlockMetadata(x, y, z) == 4)
    {
    world.getBlock(x + 1, y, z).getIcon(world, x, y, z - 1, side);
    }
    
    if (world.getBlockMetadata(x, y, z) == 5)
    {
    world.getBlock(x + 1, y, z).getIcon(world, x, y, z + 1, side);
    }
    
    

  • Administrateurs

    Il faut juste que tu place ce code dans la fonction getIcon et que tu mettes des return devant les world.getBlock(….).getIcon(....); et ça sera bon.



  • voila ma class :

    
    public IIcon getIcon(IBlockAccess world,int x, int y, int z, int side)
    {
    
    if (world.getBlockMetadata(x, y, z) == 2)
    {
    
    return world.getBlock(x - 1, y, z).getIcon(world, x - 1, y, z, side);
    }
    
    if (world.getBlockMetadata(x, y, z) == 3)
    {
    
    return world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side);
    }
    
    if (world.getBlockMetadata(x, y, z) == 4)
    {
    
    return world.getBlock(x + 1, y, z).getIcon(world, x , y, z - 1, side);
    }
    
    if (world.getBlockMetadata(x, y, z) == 5)
    {
    
    return world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side);
    }
    
    return world.getBlock(x + 1, y, z).getIcon(world, x , y, z - 1, side);
    
    

    je suis obligé d'avoir le dernier return sinon ça me met une erreur …

    et du coup ça prend en compte que le dernier 😕



  • Est-ce que tu as vérifié as quelle face correspond chaque méta data dans la classe BlockTrapDoor ?

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk



  • le "==2" ? et tout ça ?

    j'ai réussi, j'avais pas réfléchi car en gros j"ai changé les == 1 ….  pour trouver lequel correspondait à quelle positionnement ^^

    par contre je viens de voir qu'une fois la trappe levé, bah je perd la texture



  • Vérifie bien la méta data dans la classe BlockTrapDoor car il y a deux méta data à mettre dans chaque condition: une pour quand le trappe est ouverte et une autre quand elle est fermé. ( exemple if (world.getBlockMetadata(x, y, z) == 2 || world.getBlockMetadata(x, y, z) == 😎 )
    En plus, je pence que tu t'est trompé pour tes 3 derniers return car il n'y à pas les mêmes argument en x, y et z pour le getBlock er le getIcon.



  • oui je faisais des tests, ça c'est ce que j'ai de fonctionnel (je vais ajouter les deuxiemes metadata :

    
    public IIcon getIcon(IBlockAccess world,int x, int y, int z, int side)
    {
    
    if ((world.getBlockMetadata(x, y, z) == 3) || (world.getBlockMetadata(x, y, z) == 7))
    {
    
    return world.getBlock(x - 1, y, z).getIcon(world, x - 1, y, z, side);
    }
    
    if ((world.getBlockMetadata(x, y, z) == 0) || (world.getBlockMetadata(x, y, z) == 4))
    {
    
    return world.getBlock(x, y, z + 1).getIcon(world, x , y, z + 1, side);
    }
    
    if ((world.getBlockMetadata(x, y, z) == 1) || (world.getBlockMetadata(x, y, z) == 5))
    {
    
    return world.getBlock(x, y, z - 1).getIcon(world, x, y, z - 1, side);
    }
    
    return world.getBlock(x + 1, y, z).getIcon(world, x , y, z - 1, side);
    
       }
    
    

    voila c'est fini, tout marche parfaitement, merci beaucoup pour votre aide 🙂 ❤



  • Balise résolue à ne pas oublier 😃