• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Rendre son bloc orientable

Les blocs
1.7.x
8
16
11.9k
Charger plus de messages
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • robin4002
    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par robin4002 29 nov. 2021, 01:13 22 août 2014, 11:57

    youtubeCe tutoriel est également disponible en vidéo.

    Sommaire

    • Introduction
    • Pré-requis
    • Créer un item qui fait tourner les blocs
    • Dans le cas d’un bloc basique
      • Rendre le bloc orientable
      • Faire en sorte que le bloc tourne avec l’api de forge
    • Dans le cas d’un bloc avec metadata
      • Rendre le bloc orientable
      • Faire en sorte que le bloc tourne avec l’api de forge
    • Bonus
    • Résultat
    • En vidéo
    • Crédits

    Introduction

    Certains blocs de minecraft sont orientables, en fonction du sens où vous regardez lorsque vous placez le bloc, la texture du bloc va changer d’emplacement. Par exemple la citrouille est un bloc orientable. Le piston est aussi un bloc orientable, les têtes de joueurs / mobs également. Nous allons apprendre dans ce tutoriel à rendre orientable un bloc. Il y a deux cas. Dans le premier cas nous allons le faire pour un bloc basique et donc pour celui-ci nous allons faire comme la citrouille c’est à dire qu’en fonction du sens dans lequel le bloc va être placé nous allons lui attribuer un metadata différent, puis adapter la texture par rapport à ce metadata. Dans le deuxième cas nous allons le faire avec un bloc avec metadata, nous allons donc devoir passer par une entité de bloc puisque le metadata est déjà utilisé pour savoir de quel bloc il s’agit.
    De plus Forge ajoute quelques fonctions qui vont permettre de faire tourner le bloc (pour ce qui connaissent, par exemple la clé de buildcraft peut faire tourner certains blocs de minecraft et de différents mods à l’aide d’un clic droit). Nous allons aussi voir comment créer un item qui fait tourner les blocs.

    Pré-requis

    • Créer un item basique
    • Ajouter plusieurs textures à un bloc (avec ou sans metadata)
    • Ajouter une entité à votre bloc (Tile Entity)

    Créer un item qui fait tourner les blocs

    Dans la classe de votre item, ajoutez ce code :

    public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
    {
    if(!world.isRemote)
    {
    player.addChatMessage(new ChatComponentText("serveur : side " + side));
    player.addChatMessage(new ChatComponentText("serveur : metadata " + world.getBlockMetadata(x, y, z)));
    }
    if(world.getBlock(x, y, z).rotateBlock(world, x, y, z, ForgeDirection.getOrientation(side)))
    {
    return true;
    }
    return false;
    }

    La première partie du code (celle qui se trouve dans la condition !world.isRemote) n’est pas nécessaire, elle va simplement nous servir pour avoir quelques informations sur le bloc sur lequel on fait un clic droit, et ces informations vont être très utile.
    La deuxième condition est celle qui fait tourner le bloc.

    Dans le cas d’un bloc basique

    Rendre le bloc orientable :

    Pour commencer, à l’aide des prérequis, créez un bloc basique avec au moins de 2 textures (une pour la face avant, et les autres textures pour le reste).
    Ensuite dans la classe du bloc, ajoutez cette méthode :

    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    {
    int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
    world.setBlockMetadataWithNotify(x, y, z, direction, 2);
    }

    Elle va permettre de poser un metadata différent en fonction de la direction dans laquelle le joueur regarde (rotationYaw).
    Cette variable va de 0 à 360 en fonction de l’angle du joueur, on la multiplie par 4 puis on la divise par 360 pour avoir une valeur entre 0 et 4. On y ajoute 2,5 on obtient donc une valeur comprise entre 2,5 et 6,5 qu’on va arrondir, donc entre 3 et 6.
    Pour finir on utilise l’opérateur & (ET bit-à-bit) ce qui nous donne :

    Calcul en base de 10 Calcul en binaire Résultat binaire Résultat en base de 10
    3 & 3 011 & 011 011 3
    4 & 3 100 & 011 000 0
    5 & 3 101 & 011 001 1
    6 & 3 110 & 011 010 2

    Bref, tout ça pour avoir au final une variable comprise entre 0 et 3 en fonction de là où regarde le joueur. Et avec la fonction world.setBlockMetadataWithNotify, on place un metadata différent en fonction de ce nombre.

    Maintenant que notre bloc a un metadata différent en fonction de la direction, allez en jeu et placez 4 blocs autour de vous de tel sorte qu’ils aient tous une direction différente. Faites un clic droit avec l’item que nous avons créé avant, et vous devrez voir dans le tchat le metadata du bloc ainsi que la face sur laquelle vous avez cliqué. Et voila, vous avez toutes les valeurs, maintenant il ne reste plus qu’à modifier la fonction getIcon avec ce que vous venez d’observer.
    Exemple : Je fais un clic droit sur la face du bloc qui devrait être différente :

    Son metadata est 1, et le côté est 4. Donc dans ma fonction getIcon, je vais mettre une condition : if(side == 4 && metadata == 1) -> on utilise la texture avant. Et on fait ça pour les 4 directions.
    Si vous n’arrivez pas à comprendre, je vous conseilles de regarder la vidéo à 12 minutes et 35 secondes.

    Une fois les conditions ajoutés pour les 4 côtés on a :

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int side, int metadata)
    {
    if((side == 3 && metadata == 0) || (side == 4 && metadata == 1) || (side == 2 && metadata == 2) || (side == 5 && metadata == 3))
    {
    return this.blockIcon2;
    }
    return this.blockIcon;
    }

    Mit en condition ternaire pour tenir sur une seule ligne ça donne ça :

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int side, int metadata)
    {
    return side == 3 && metadata == 0 ? this.blockIcon2 : (side == 4 && metadata == 1 ? this.blockIcon2 : (side == 2 && metadata == 2 ? this.blockIcon2 : (side == 5 && metadata == 3 ? this.blockIcon2 : this.blockIcon)));
    }

    blockIcon2 correspond à ma texture pour la face de devant, blockIcon pour les autres faces.

    Faire en sorte que le bloc tourne avec l’api de forge :

    Toujours dans la classe du bloc, ajoutez ces deux fonctions :

    public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
    {
    if((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote)
    {
    int direction = world.getBlockMetadata(x, y, z) + 1;
    if(direction > 3)
    {
    direction = 0;
    }
    world.setBlockMetadataWithNotify(x, y, z, direction, 3);
    return true;
    }
    return false;
    }
    public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
    {
    return new ForgeDirection[] {ForgeDirection.UP, ForgeDirection.DOWN};
    }

    La fonction rotateBlock fait tourner le bloc. La première condition vérifie que le joueur a fait un clic droit sur le haut du bloc ou sur le bas. Ainsi le bloc ne tournera pas si on fait un clic droit sur les autres directions comme les blocs de minecraft. Vous pouvez bien sûr modifier cette condition pour que le bloc tourne si on clique sur un autre côté. Ensuite on vérifie qu’on est pas sur le monde client (donc le monde de rendu). Puis on cherche le metadata du bloc, on lui ajoute 1, si il dépasse 3 on le remet à 0 et pour finir on change le metadata du bloc.
    On return la boolean sur true, car le bloc a bien tourné. Pour les autres cas on met false.

    La fonction getValidRotations permet de dire quels sont les axes où l’on peut faire un clic droit pour faire tourner le bloc. Vous pouvez bien sûr en mettre plus, ou mettre directement return ForgeDirection.VALID_DIRECTIONS; pour tous les axes.

    Dans le cas d’un bloc avec metadata

    Rendre le bloc avec metadata orientable :

    Dans mon cas je vais rendre que le bloc de metadata 0 orientable mais vous pouvez bien sûr le faire avec tous les autres blocs, ou le faire seulement pour un metadata précis.
    Pour commencer il faut ajouter une entité de bloc au metadata en question. Je ne vais pas revenir sur les entités de bloc sur ce tutoriel, retournez voir le tutoriel sur les entités de bloc (il est dans les pré-requis) si vous ne savez plus comment faire. Dans mon cas je vais nommer l’entité de bloc TileEntityDirectional.

    Dans la classe du bloc ajoutez cette fonction :

    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    {
    if(stack.getItemDamage() == 0)
    {
    TileEntity tile = world.getTileEntity(x, y, z);
    if(tile instanceof TileEntityDirectional)
    {
    int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
    ((TileEntityDirectional)tile).setDirection((byte)direction);
    }
    }
    }

    La première condition (stack.getItemDamage() == 0) permet de vérifier que le metadata est 0 car comme dit plus haut je n’ai que l’attention de rendre orientable mon bloc de metadata 0.
    Ensuite on obtient l’entité de bloc, on vérifie qu’elle est bien d’instance TileEntityDirectional et si c’est le cas on calcule la direction (c’est le même code que celui utilisé dans le cas du bloc basique, remontez plus haut pour les détails) puis on met cette valeur dans l’entité de bloc.
    Vous allez avoir une erreur sur setDirection car nous n’avons pas encore créé cette fonction.

    Nous allons d’ailleurs tout de suite la corriger, allez dans la classe de votre entité de bloc (qui devrait être normalement vide pour l’instant) et ajoutez :

    private byte direction;
    @Override
    public void readFromNBT(NBTTagCompound compound)
    {
    super.readFromNBT(compound);
    this.direction = compound.getByte("Direction");
    }
    @Override
    public void writeToNBT(NBTTagCompound compound)
    {
    super.writeToNBT(compound);
    compound.setByte("Direction", this.direction);
    }
    public byte getDirection()
    {
    return direction;
    }
    public void setDirection(byte direction)
    {
    this.direction = direction;
    this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
    }

    Dans l’ordre :

    • on déclare la variable direction, qui contiendra la direction du bloc.
    • readFromNBT permet de lire dans la sauvegarde du monde la valeur de la direction (mais ça vous devrez déjà le savoir si vous avez bien suivis les pré-requis ;))
    • writeToNBT permet d’écrire dans la sauvegarde du monde la valeur de la direction (idem que le commentaire d’en haut)
    • getDirection permet d’obtenir la valeur de la direction
    • setDirection permet de mettre la valeur de la direction, on fait un worldObj.markBlockForUpdate juste en dessous pour indiquer que le bloc a été modifié.

    Mais il va y avoir un problème, en effet la valeur direction est bien sauvegardée, mais si vous avez bien retenu ce qui est dit dans le tutoriel sur les entités de bloc, elle est sauvegardée du côté du serveur, or c’est le client qui en a besoin pour faire le rendu. Il faut donc synchroniser ces deux valeurs, ajoutez donc ces deux fonctions dans la classe de l’entité de bloc :

    public Packet getDescriptionPacket()
    {
    NBTTagCompound nbttagcompound = new NBTTagCompound();
    this.writeToNBT(nbttagcompound);
    return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbttagcompound);
    }
    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
    {
    this.readFromNBT(pkt.func_148857_g());
    this.worldObj.markBlockRangeForRenderUpdate(this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord);
    }

    La première permet de mettre la valeur dans le paquet, la deuxième lit dans le paquet la valeur à l’arrivée.

    Retournez maintenant dans la classe du bloc et ajoutez la fonction suivante :

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
    {
    if(world.getBlockMetadata(x, y, z) == 0) // vérifie que le metadata est 0, car comme déjà dit je veux que seul mon bloc de metadata 0 soit orientable
    {
    if(side == 0 || side == 1) // si le side est en bas ou en haut
    {
    return this.icons[0][0]; // je mets la texture que j'ai prévu pour le haut et le bas
    }
    TileEntity tile = world.getTileEntity(x, y, z); // on obtient l'entité de bloc
    if(tile instanceof TileEntityDirectional) // on vérifie son instance pour éviter un ClassCastException
    {
    byte direction = ((TileEntityDirectional)tile).getDirection(); // on obtient la valeur de la direction
    return side == 3 && direction == 0 ? this.icons[0][1] : (side == 4 && direction == 1 ? this.icons[0][1] : (side == 2 && direction == 2 ? this.icons[0][1] : (side == 5 && direction == 3 ? this.icons[0][1] : this.icons[0][2]))); // et ici c'est la même condition ternaire que j'ai déjà utilisé dans le cas du bloc basique, sauf qu'on vérifie la direction et non le metadata
    }
    }
    return this.getIcon(side, world.getBlockMetadata(x, y, z)); // dans les autres cas on cherche la texture dans la fonction getIcon(side, metadata)
    }

    Le code est commenté, vous devrez le comprendre. Attention, dans la fonction getIcon(side, metadata) vous ne devez pas enlever les blocs qui utilisent cette autre fonction, car getIcon(side, metadata) est toujours utilisé pour le rendu en main !
    D’ailleurs je l’ai modifié pour que la texture qui s’affiche à l’avant soit visible dans l’inventaire :

    public IIcon getIcon(int side, int metadata)
    {
    if(metadata == 0) // si le metadata est 0
    {
    if(side == 0 || side == 1) // si le côté est le bas ou le haut
    {
    return this.icons[0][0]; // je mets la texture que j'ai prévu pour le haut et le bas
    }
    else if(side == 3) // sinon si le côté est 3
    {
    return this.icons[0][1]; // je mets la texture que j'ai prévu pour la face avant du bloc
    }
    else
    {
    return this.icons[0][2]; // sinon je mets la texture pour les 3 autres faces.
    }
    }
    else if(side > 2)
    {
    side = 2;
    }
    return metadata >= 0 && metadata < subBlock.length ? this.icons[metadata][side] : this.icons[0][0]; // dans les autres cas (même code que celui montré dans le tutoriel sur les blocs multi-textures)
    }

    Faire en sorte que le bloc avec metadata tourne avec l’api de forge :

    Toujours dans la classe du bloc, ajoutez :

    @Override
    public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
    {
    if((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote && world.getBlockMetadata(x, y, z) == 0)
    {
    TileEntity tile = world.getTileEntity(x, y, z);
    if(tile instanceof TileEntityDirectional)
    {
    TileEntityDirectional tileDirectional = (TileEntityDirectional)tile;
    byte direction = tileDirectional.getDirection();
    direction++;
    if(direction > 3)
    {
    direction = 0;
    }
    tileDirectional.setDirection(direction);
    return true;
    }
    }
    return false;
    }
    public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
    {
    return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] {ForgeDirection.UP, ForgeDirection.DOWN} : ForgeDirection.VALID_DIRECTIONS; // si le metadata est 0, les deux directions sur lesquels on peut faire tourner le bloc, sinon toutes les directions ce qui est la valeur par défaut pour les blocs non directionnels.
    }

    Ce sont exactement les mêmes fonctions que dans le cas du bloc basique sauf que :

    • Je vérifie d’abord que le metadata est 0
    • Je ne change pas le metadata mais la valeur dans l’entité de bloc
      Et voila, c’est terminé !

    Résultat

    Voir le commit sur github
    Le commit sur github montre clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.

    En vidéo

    https://www.youtube.com/watch?v=0ZJFK5tJaZI

    Crédits

    Rédaction :

    • robin4002

    Correction :

    • Fine33

    Creative Commons
    Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

    retourRetour vers le sommaire des tutoriels

    1 réponse Dernière réponse Répondre Citer 0
    • environ 17 jours
    • 0xPic0
      0xPic0 dernière édition par 8 sept. 2014, 18:38

      Merci Robin. Vraiment un gros plus que tu nous offre là. Un vrai plaisir.

      1 réponse Dernière réponse Répondre Citer 0
      • environ 2 mois
      • zeldadu76290
        zeldadu76290 dernière édition par 27 oct. 2014, 11:14

        Qu’elle tuto dois je suivre un pour un  rendue orientable tesr ?

        Travail sur le Mod PrimevalCraftWorld  :)

        Si tu est Interresser contact moi  :D

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 27 oct. 2014, 12:06

          Suis le second cas, un bloc avec metadata puis ce tutoriel : http://www.minecraftforgefrance.fr/showthread.php?tid=1509#bonus

          1 réponse Dernière réponse Répondre Citer 0
          • zeldadu76290
            zeldadu76290 dernière édition par 1 nov. 2014, 14:46

            Bonjour j’ai depuis bientôt une semaine un problème sur cette ligne sur TileEntityDirectional, TileEntityDirectional)tile

            TileEntity tile = world.getTileEntity(x, y, z);
                            if(tile instanceof TileEntityDirectional)
                            {
                                int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                                ((TileEntityDirectional)tile).setDirection((byte)direction);
                            }
                        }
            voici ma classe

            ​package theopsisblack76.primevalcraftworld;
            import java.util.Random;
            import net.minecraft.block.BlockContainer;
            import net.minecraft.block.material.Material;
            import net.minecraft.entity.Entity;
            import net.minecraft.entity.EntityLivingBase;
            import net.minecraft.item.ItemStack;
            import net.minecraft.tileentity.TileEntity;
            import net.minecraft.util.IIcon;
            import net.minecraft.world.World;
            import cpw.mods.fml.relauncher.Side;
            import cpw.mods.fml.relauncher.SideOnly;
            public class BlockAnno extends BlockContainer
            {
                private static final String subBlock = null;
            int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0;
            private IIcon[][] icons;
                protected BlockAnno()
                {
                    super(Material.ground);
                }
                @SideOnly(Side.CLIENT)
                public void randomDisplayTick(World world, int x, int y, int z, Random random)
                {
                    for(int l = 0; l < 700; ++l)
                    {
                    }
                }
                public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
                {
                    if(entity.ridingEntity == null && entity.riddenByEntity == null && !world.isRemote)
                    {
                        entity.travelToDimension(1);
                    }
                }
                public IIcon getIcon(int side, int metadata)
                {
                    if(metadata == 0) 
                    {
                        if(side == 0 || side == 1) 
                        {
                            return this.icons[0][0];
                        }
                        else if(side == 3) 
                        {
                            return this.icons[0][1]; 
                        }
                        else
                        {
                            return this.icons[0][2]; 
                        }
                    }
                    else if(side > 2)
                    {
                        side = 2;
                    }
                    return metadata >= 0 && metadata < subBlock.length() ? this.icons[metadata][side] : this.icons[0][0]; // dans les autres cas (même code que celui montré dans le tutoriel sur les blocs multi-textures)
                }
                @Override
                public TileEntity createNewTileEntity(World world, int metadata)
                {
                    return new TileEntityAnno();
                }
                public boolean isOpaqueCube()
                {
                    return false;
                }
                public boolean renderAsNormalBlock()
                {
                    return false;
                }
                public int getRenderType()
                {
                    return -1;
                }
                @Override
                public int tickRate(World world)
                {
                    return 10;
                }
                public int quantityDropped(Random par1Random)
                {
                    return 0;
                    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                    {
                        if(stack.getItemDamage() == 0)
                        {
                            TileEntity tile = world.getTileEntity(x, y, z);
                            if(tile instanceof TileEntityDirectional)
                            {
                                int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                                ((TileEntityDirectional)tile).setDirection((byte)direction);
                            }
                        }

            Travail sur le Mod PrimevalCraftWorld  :)

            Si tu est Interresser contact moi  :D

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 1 nov. 2014, 14:52

              Il te manque des fermetures d’accolades …
              à la fin de la fonction quantityDropped, à la fin de la fonction onBlockPlacedBy et à la fin de la classe.

              1 réponse Dernière réponse Répondre Citer 0
              • bin4r1s
                bin4r1s dernière édition par 5 nov. 2014, 15:23

                Bonjour,
                J’ai suivi le tuto pour orienter son bloc avec metadata mais, après test, le bloc ne s’oriente pas.
                Pouvez-vous m’aider ?

                Block :

                public class BlockCrusher extends BasicBlock
                {
                public static String[] subBlock = new String[] {"copper", "bronze", "steel"};
                public IIcon[][] iconArray = new IIcon[subBlock.length][3];
                private static boolean field_149934_M;
                public void registerBlockIcons(IIconRegister iconRegister)
                {
                for(int i = 0; i < subBlock.length; i++)
                {
                this.iconArray*[0] = iconRegister.registerIcon("neworesbasic:" + subBlock* + "_crusher_top");
                this.iconArray*[1] = iconRegister.registerIcon("neworesbasic:" + subBlock* + "_crusher_front");
                this.iconArray*[2] = iconRegister.registerIcon("neworesbasic:" + subBlock* + "_crusher_side");
                }
                }
                public void getSubBlocks(Item item, CreativeTabs tabs, List list)
                {
                for(int i = 0; i < subBlock.length; i++)
                {
                list.add(new ItemStack(item, 1, i));
                }
                }
                public int damageDropped(int metadata)
                {
                return metadata;
                }
                @SideOnly(Side.CLIENT)
                public IIcon getIcon(int side, int metadata)
                {
                if(side == 1) // UP
                   {
                    return this.iconArray[metadata][0];
                   }
                   else if(side == 3) // FRONT : 3
                   {
                    return this.iconArray[metadata][1];
                   }
                   else
                   {
                    return this.iconArray[metadata][2];
                   }
                }
                public BlockCrusher()
                {
                this.setCreativeTab(Basic.BasicTab);
                }
                @Override
                    public TileEntity createTileEntity(World world, int metadata)
                    {
                        return new TileEntityCrusher();
                    }
                    @Override
                    public boolean hasTileEntity(int metadata)
                    {
                        return true;
                    }
                    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
                {
                    FMLNetworkHandler.openGui(player, Basic.instance, 0, world, x, y, z);
                return true;
                }
                    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                {
                TileEntity te = world.getTileEntity(x, y, z);
                if(te != null && te instanceof TileEntityCrusher && stack.hasDisplayName())
                {
                ((TileEntityCrusher)te).setCustomGuiName(stack.getDisplayName());
                }
                if(te instanceof TileEntityCrusher)
                {
                int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                            ((TileEntityCrusher)te).setDirection((byte)direction);
                }
                }
                    public void breakBlock(World world, int x, int y, int z, Block block, int metadata)
                    {
                    dropContainerItem(world, x, y, z);
                        super.breakBlock(world, x, y, z, block, metadata);
                    }
                    protected void dropContainerItem(World world, int x, int y, int z)
                    {
                    TileEntityCrusher tecrusher = (TileEntityCrusher)world.getTileEntity(x, y, z);
                        if (tecrusher != null)
                        {
                            for (int slotId = 0; slotId < tecrusher.getSizeInventory(); slotId++)
                            {
                                ItemStack stack = tecrusher.getStackInSlot(slotId);
                                if (stack != null)
                                {
                                    float f = world.rand.nextFloat() * 0.8F + 0.1F;
                                    float f1 = world.rand.nextFloat() * 0.8F + 0.1F;
                                    EntityItem entityitem;
                                    for (float f2 = world.rand.nextFloat() * 0.8F + 0.1F; stack.stackSize > 0; world.spawnEntityInWorld(entityitem))
                                    {
                                        int k1 = world.rand.nextInt(21) + 10;
                                        if (k1 > stack.stackSize)
                                        {
                                            k1 = stack.stackSize;
                                        }
                                        stack.stackSize -= k1;
                                        entityitem = new EntityItem(world, (double)((float)x + f), (double)((float)y + f1), (double)((float)z + f2), new ItemStack(stack.getItem(), k1, stack.getItemDamage()));
                                        float f3 = 0.05F;
                                        entityitem.motionX = (double)((float)world.rand.nextGaussian() * f3);
                                        entityitem.motionY = (double)((float)world.rand.nextGaussian() * f3 + 0.2F);
                                        entityitem.motionZ = (double)((float)world.rand.nextGaussian() * f3);
                                        if (stack.hasTagCompound())
                                        {
                                            entityitem.getEntityItem().setTagCompound((NBTTagCompound)stack.getTagCompound().copy());
                                        }
                                    }
                                }
                            }
                        }
                    }
                    public static void updateCrusherBlockState(boolean p_149931_0_, World p_149931_1_, int p_149931_2_, int p_149931_3_, int p_149931_4_)
                    {
                        int l = p_149931_1_.getBlockMetadata(p_149931_2_, p_149931_3_, p_149931_4_);
                        TileEntity tileentity = p_149931_1_.getTileEntity(p_149931_2_, p_149931_3_, p_149931_4_);
                        field_149934_M = true;
                        /*if (p_149931_0_)
                        {
                            p_149931_1_.setBlock(p_149931_2_, p_149931_3_, p_149931_4_, Basic.crusher); // In-crushing block
                        }
                        else
                        {
                            p_149931_1_.setBlock(p_149931_2_, p_149931_3_, p_149931_4_, Basic.crusher);
                        }*/
                        field_149934_M = false;
                        p_149931_1_.setBlockMetadataWithNotify(p_149931_2_, p_149931_3_, p_149931_4_, l, 2);
                        if (tileentity != null)
                        {
                            tileentity.validate();
                            p_149931_1_.setTileEntity(p_149931_2_, p_149931_3_, p_149931_4_, tileentity);
                        }
                    }
                    public boolean hasComparatorInputOverride()
                    {
                        return true;
                    }
                    public int getComparatorInputOverride(World p_149736_1_, int p_149736_2_, int p_149736_3_, int p_149736_4_, int p_149736_5_)
                    {
                        return Container.calcRedstoneFromInventory((IInventory)p_149736_1_.getTileEntity(p_149736_2_, p_149736_3_, p_149736_4_));
                    }
                }

                TileEntity :

                private byte direction;
                @Override
                public void readFromNBT(NBTTagCompound nbttag)
                {
                super.readFromNBT(nbttag);
                this.direction = nbttag.getByte("Direction");
                // Code. Mystère… ;)
                }
                @Override
                public void writeToNBT(NBTTagCompound nbttag)
                {
                super.writeToNBT(nbttag);
                nbttag.setByte("Direction", this.direction);
                // Code. Mystère... ;)
                }
                public byte getDirection()
                {
                return direction;
                }
                public void setDirection(byte direction)
                {
                this.direction = direction;
                this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
                }
                public Packet getDescriptionPacket()
                {
                NBTTagCompound nbttagcompound = new NBTTagCompound();
                this.writeToNBT(nbttagcompound);
                return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbttagcompound);
                }
                public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
                {
                this.readFromNBT(pkt.func_148857_g());
                this.worldObj.markBlockRangeForRenderUpdate(this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord);
                }

                Mes mods:

                • New Ores
                • More Dragons
                1 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 5 nov. 2014, 15:54

                  Tu as loupé une partie du tutoriel, il te manque la fonction :
                  public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)

                  1 réponse Dernière réponse Répondre Citer 0
                  • bin4r1s
                    bin4r1s dernière édition par 5 nov. 2014, 16:55

                    Merci ça marche à la perfection ! 🙂

                    Mes mods:

                    • New Ores
                    • More Dragons
                    1 réponse Dernière réponse Répondre Citer 0
                    • environ 8 mois
                    • A
                      amongorigin dernière édition par 22 juin 2015, 22:41

                      Ce message a été supprimé !
                      1 réponse Dernière réponse Répondre Citer 0
                      • Diangle
                        Diangle dernière édition par 22 juin 2015, 22:45

                        non, il faut utilisé le nouveau système

                        1 réponse Dernière réponse Répondre Citer 0
                        • un an
                        • R
                          Raphmaster6 dernière édition par 30 juin 2016, 09:21

                          J’ai suivi la première possibilité (l’Item qui fait tourner les blocs) et ça me donne ça : 
                          Classe Principale :

                          package fr.Raphmaster6.TestMod.common;
                          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.registry.GameRegistry;
                          import net.minecraft.block.Block;
                          import net.minecraft.block.material.Material;
                          import net.minecraft.creativetab.CreativeTabs;
                          import net.minecraft.init.Blocks;
                          import net.minecraft.init.Items;
                          import net.minecraft.item.Item;
                          import net.minecraft.item.ItemStack;
                          @Mod(modid = "testmod", name = "ModTest", version = "0.0.0-Test Phase")
                          public class TestMod {
                          public static final String MODID = "testmod";
                          public static final String NAME = "ModTest";
                          public static Item TestItem;
                          public static Item TestItemRecipeHint;
                          public static Block TestBlock;
                          public static Block  AddDistanceToX;
                          public static Block AddDistanceToY;
                          public static Block AddDistanceToZ;
                          public static Block SpeedBooster;
                          public static Block TestBlock2Textures;
                          public static Item ItemOrientation;
                          @Instance("testmod")
                          public static TestMod instance;
                          @SidedProxy(clientSide = "fr.Raphmaster6.TestMod.client.ClientProxy", serverSide = "fr.Raphmaster6.TestMod.common.CommonProxy")
                          public static CommonProxy proxy;
                          @EventHandler
                          public void preInit(FMLPreInitializationEvent event)
                          {
                          TestItem = new TestItem().setUnlocalizedName("itemTest").setTextureName(TestMod.MODID + ":itemTest").setCreativeTab(CreativeTabs.tabMaterials);
                          GameRegistry.registerItem(TestItem, "test_item");
                          TestItemRecipeHint = new TestItemRecipeHint().setUnlocalizedName("itemTestRecipe").setTextureName(TestMod.MODID + ":itemTestRecipe").setCreativeTab(CreativeTabs.tabMaterials);
                          GameRegistry.registerItem(TestItemRecipeHint, "test_item_recipe");
                          TestBlock = new TestBlock(Material.ice).setBlockName("blockTest").setBlockTextureName(MODID + ":testBlock").setCreativeTab(CreativeTabs.tabBlock);
                          GameRegistry.registerBlock(TestBlock, "testBlock");
                          AddDistanceToX = new AddDistanceToX(Material.rock).setBlockName("xRollingBlock").setBlockTextureName(MODID + ":rollingBlockX").setCreativeTab(CreativeTabs.tabBlock).setBlockUnbreakable();
                          GameRegistry.registerBlock(AddDistanceToX, "xRollingBlock");
                          AddDistanceToY = new AddDistanceToY(Material.rock).setBlockName("yRollingBlock").setBlockTextureName(MODID + ":rollingBlockY").setCreativeTab(CreativeTabs.tabBlock).setBlockUnbreakable();
                          GameRegistry.registerBlock(AddDistanceToY, "yRollingBlock");
                          AddDistanceToZ = new AddDistanceToZ(Material.rock).setBlockName("zRollingBlock").setBlockTextureName(MODID + ":rollingBlockZ").setCreativeTab(CreativeTabs.tabBlock).setBlockUnbreakable();
                          GameRegistry.registerBlock(AddDistanceToZ, "zRollingBlock");
                          SpeedBooster = new SpeedBooster(Material.rock).setBlockName("speedBooster").setBlockTextureName(MODID + ":SpeedBooster").setCreativeTab(CreativeTabs.tabBlock).setBlockUnbreakable();
                          GameRegistry.registerBlock(SpeedBooster, "speedBooster");
                          TestBlock2Textures = new TestBlock2Textures(Material.rock).setBlockName("testBlock2textures").setCreativeTab(CreativeTabs.tabBlock).setBlockUnbreakable();
                          GameRegistry.registerBlock(TestBlock2Textures, "testBlock2textures");
                          GameRegistry.registerTileEntity(TestBlockOrientationTileEntity.class, "testmod:ModTest");
                          ItemOrientation = new ItemOrientation().setUnlocalizedName("itemOrientation").setTextureName(TestMod.MODID + ":itemOrientation").setCreativeTab(CreativeTabs.tabTools).setMaxStackSize(1);
                          }
                          @EventHandler
                          public void init(FMLInitializationEvent event)
                          {
                          proxy.registerRender();
                          GameRegistry.addRecipe(new  ItemStack(TestItem, 8), new Object[]{
                          "XXX",
                          "XIX",
                          "XXX",
                          'X', Items.diamond,
                          'I', TestMod.TestItemRecipeHint,
                          });
                          GameRegistry.addShapelessRecipe(new ItemStack(TestItemRecipeHint, 4), new Object[]{
                          Items.diamond
                          });
                          GameRegistry.addSmelting(Items.diamond, new ItemStack(TestItemRecipeHint, 4), 5);
                          GameRegistry.addRecipe(new ItemStack(TestBlock, 4), new Object[]{
                          "I I",
                          "III",
                          "XIX",
                          'I', TestMod.TestItem,
                          'X', Items.diamond,
                          });
                          GameRegistry.addRecipe(new ItemStack(AddDistanceToX, 2), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', Items.slime_ball,
                          'E', new ItemStack(Items.dye, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(AddDistanceToY, 2), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', Items.slime_ball,
                          'E', new ItemStack(Items.dye, 1, 6),
                          });
                          GameRegistry.addRecipe(new ItemStack(AddDistanceToZ, 2), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', Items.slime_ball,
                          'E', new ItemStack(Items.dye, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(SpeedBooster, 2), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', Items.arrow,
                          'E', Items.slime_ball,
                          });
                          //Start the lines of code to craft the TestBlock2textures
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 0),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 1),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 2),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 3),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 4),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 5),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 6),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 7),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 8),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 9),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 10),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 11),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 12),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 13),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 14),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 15),
                          'E', new ItemStack(Blocks.log, 1, 0),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 0),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 1),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 2),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 3),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 4),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 5),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 6),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 7),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 8),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 9),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 10),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 11),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 12),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 13),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 14),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 15),
                          'E', new ItemStack(Blocks.log, 1, 1),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 0),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 1),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 2),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 3),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 4),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 5),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 6),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 7),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 8),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 9),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 10),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 11),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 12),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 13),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 14),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 15),
                          'E', new ItemStack(Blocks.log, 1, 2),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 0),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 1),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 2),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 3),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 4),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 5),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 6),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 7),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 8),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 9),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 10),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 11),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 12),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 13),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 14),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          GameRegistry.addRecipe(new ItemStack(TestBlock2Textures, 4), new Object[]{
                          "X X",
                          "IXI",
                          "HEH",
                          'X', Items.diamond,
                          'I', TestMod.TestItem,
                          'H', new ItemStack(Items.dye, 1, 15),
                          'E', new ItemStack(Blocks.log, 1, 3),
                          });
                          //End the lines of code to craft the TestBlock2textures
                          }
                          @EventHandler
                          public void postinit(FMLPostInitializationEvent event)
                          {
                          }
                          }

                          Classe de l’Item :

                          package fr.Raphmaster6.TestMod.common;
                          import net.minecraft.entity.player.EntityPlayer;
                          import net.minecraft.item.Item;
                          import net.minecraft.item.ItemStack;
                          import net.minecraft.util.ChatComponentText;
                          import net.minecraft.world.World;
                          public class ItemOrientation extends Item {
                              public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                              {
                                  if(!world.isRemote)
                                  {
                                      player.addChatMessage(new ChatComponentText("serveur : side " + side));
                                      player.addChatMessage(new ChatComponentText("serveur : metadata " + world.getBlockMetadata(x, y, z)));
                                  }
                                  if(world.getBlock(x, y, z).rotateBlock(world, x, y, z, ForgeDirection.getOrientation(side)))
                                  {
                                      return true;
                                  }
                                  return false;
                              }
                          }

                          L’erreur affichée :

                          ForgeDirection cannot be resolved
                          
                          1 réponse Dernière réponse Répondre Citer 0
                          • AymericRed
                            AymericRed dernière édition par 30 juin 2016, 10:33

                            Tu es en + que 1.7.10 ? Remplace les ForgeDirection par EnumFacing.

                            Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk

                            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                            1 réponse Dernière réponse Répondre Citer 0
                            • robin4002
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 30 juin 2016, 12:14

                              ctrl + shift + o

                              1 réponse Dernière réponse Répondre Citer 0
                              • R
                                Raphmaster6 dernière édition par 2 juil. 2016, 08:53

                                O.K merci… En plus, je connais l’astuce, j’aurais du y penser mais je croyais que c’était uniquement pour les Imports

                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 2 juil. 2016, 11:31

                                  Oui c’est pour les importations, tu n’avais pas importé ForgeDirection donc forcement il ne le reconnaissait pas.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Référencé par  robin4002 robin4002 29 nov. 2021, 01:52
                                  • Référencé par  robin4002 robin4002 29 nov. 2021, 02:04
                                  • Référencé par  robin4002 robin4002 29 nov. 2021, 02:07
                                  • 1 / 1
                                  2 sur 16
                                  • Premier message
                                    2/16
                                    Dernier message
                                  Design by Woryk
                                  Contact / Mentions Légales

                                  MINECRAFT FORGE FRANCE © 2018

                                  Powered by NodeBB