1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

[1.5.x] Un item simple

Discussion dans 'Tutoriels' créé par robin4002, 21 Mar 2013.

  1. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Dans ce tutoriel nous allons apprendre à faire un item simple.

    Prérequis :
    -Une classe principale

    1. Déclaration dans la classe principale

    Pour commencer notre item, il faut le déclarer dans la class principale avec :

    Code (java):
    public static Item Item_tutoriel;
    Explication: cette fonction sert à déclarer l'item.

    Nous allons aussi ajouter cela, mais cette fois-ci dans la fonction "Init(FMLInitializationEvent event)" :

    Code (java):
    Item_tutoriel = new Item_tutoriel(4000).setUnlocalizedName("Item_tutoriel");

    Ici, on définit l'item : on commence par dire de quel item on parle, puis on dit à quelle classe il correspond, on donne une valeur à la variable que l'on va définir dans la classe et enfin on ajoute ".setUnlocalizedName" pour donner pour définir le nom de l'item (pas en jeu, on verra ça plus tard). Normalement vous avez une erreur, elle sera corrigée plus tard.

    Contrairement aux blocs, les items n'ont pas besoin d'être enregistrés.

    On termine cette partie avec l'ajout du nom en jeu de l'item :
    Code (java):
    LanguageRegistry.addName(Item_tutoriel, "Item tutoriel");
    2. La classe de l'item

    Ici, nous allons créer la classe de l'item, cela va corriger l'erreur de la classe principale.
    Pour commencer il vous faut créer une classe et normalement vous avez ça :

    Code (java):
    package modTutoriel.common;
     
    public class Item_tutoriel
    {
     
    }

    Il suffit d'ajouter "extends Item". Une erreur apparaît, il vous suffit de faire ctrl+shift+o, puis de passer la souris sur Nom_de_l'item qui est souligné en rouge et de cliquer sur "add constructor". Il faut aussi penser à ajouter "maxStackSize = 64;" dans le constructor, cela définit le nombre maximal de cet item qui peuvent être contenus dans une seule case (ex : boule de neige = 16).

    Normalement vous obtenez cela :

    Code (java):
    package modTutoriel.common;
     
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.item.Item;
     
    public class Item_tutoriel extends Item
    {
     
        public Item_tutoriel(int par1)
        {
            super(par1);
            this.maxStackSize = 64;
        }
     
        @Override
        public void registerIcons(IconRegister iconRegister)
        {
                itemIcon = iconRegister.registerIcon("modTutoriel:ItemTuto");
        }
     
    }
    ItemTuto est un fichier .png de 16x16 qui doit se trouver dans forge/mcp/src/minecraft/mods/modTutoriel/textures/items/

    Et voilà, vous avez créé un item le plus simple possible, d'autres tutoriels sont disponibles pour l'améliorer.
     
    • J'aime J'aime x 3
  2. Rems19

    Rems19 Explorateur

    Inscrit:
    3 Mai 2012
    Messages:
    69
    Points:
    71
    Sexe:
    Homme
    Salut, j'ai une erreur sur updateIcons(IconRegister iconRegister)... Je n'arrive pas à trouver d'où ça vient car je n'ai aucune autre erreur (sauf ligne du dessous sur registerIcon)

    Tu vois une solution ?

    Merci d'avance ! ;)
     
  3. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Le code est pour 1.5.1, pas 1.5, utilise forge 7.7.0.608
     
  4. Rems19

    Rems19 Explorateur

    Inscrit:
    3 Mai 2012
    Messages:
    69
    Points:
    71
    Sexe:
    Homme
    Ok, merci pour l'info, je n'avais pas vu ;)
    Continue comme ça tes tutos sont vraiment cool !
     
  5. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 231
    Points:
    304
    Sexe:
    Homme
    Super tuto , ( comme d'habitude ) Mais j'ai un problème ...
    Forge ne détecte pas mes textures ! pourtant
    Le code :
    Code (cpp):
    package GunMod.common;
     
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.enchantment.Enchantment;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.projectile.EntityArrow;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.Icon;
    import net.minecraft.world.World;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.entity.player.ArrowLooseEvent;
    import net.minecraftforge.event.entity.player.ArrowNockEvent;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
     
    public class Gun1 extends Item
    {
        public static final String[] field_94601_a = new String[] {"bow_pull_0", "bow_pull_1", "bow_pull_2"};
        @SideOnly(Side.CLIENT)
        private Icon[] field_94600_b;
     
        public Gun1(int par1)
        {
            super(par1);
            this.maxStackSize = 1;
            this.setMaxDamage(384);
            this.setCreativeTab(CreativeTabs.tabCombat);
        }
     
        /**
        * called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount
        */

        public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4)
        {
            int j = this.getMaxItemUseDuration(par1ItemStack) - par4;
     
            ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j);
            MinecraftForge.EVENT_BUS.post(event);
            if (event.isCanceled())
            {
                return;
            }
            j = event.charge;
     
            boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
     
            if (flag || par3EntityPlayer.inventory.hasItem(Item.arrow.itemID))
            {
                float f = (float)j / 20.0F;
                f = (f * f + f * 2.0F) / 3.0F;
     
                if ((double)f < 0.1D)
                {
                    return;
                }
     
                if (f > 1.0F)
                {
                    f = 1.0F;
                }
     
                EntityArrow entityarrow = new EntityArrow(par2World, par3EntityPlayer, f * 2.0F);
     
                if (f == 1.0F)
                {
                    entityarrow.setIsCritical(true);
                }
     
                int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);
     
                if (k > 0)
                {
                    entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
                }
     
                int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);
     
                if (l > 0)
                {
                    entityarrow.setKnockbackStrength(l);
                }
     
                if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0)
                {
                    entityarrow.setFire(100);
                }
     
                par1ItemStack.damageItem(1, par3EntityPlayer);
                par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
     
                if (flag)
                {
                    entityarrow.canBePickedUp = 2;
                }
                else
                {
                    par3EntityPlayer.inventory.consumeInventoryItem(Item.arrow.itemID);
                }
     
                if (!par2World.isRemote)
                {
                    par2World.spawnEntityInWorld(entityarrow);
                }
            }
        }
     
        public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
        {
            return par1ItemStack;
        }
     
        /**
        * How long it takes to use or consume an item
        */

        public int getMaxItemUseDuration(ItemStack par1ItemStack)
        {
            return 72000;
        }
     
        /**
        * returns the action that specifies what animation to play when the items is being used
        */

        public EnumAction getItemUseAction(ItemStack par1ItemStack)
        {
            return EnumAction.bow;
        }
     
        /**
        * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
        */

        public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
        {
            ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
            MinecraftForge.EVENT_BUS.post(event);
            if (event.isCanceled())
            {
                return event.result;
            }
     
            if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Item.arrow.itemID))
            {
                par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
            }
     
            return par1ItemStack;
        }
     
        /**
        * Return the enchantability factor of the item, most of the time is based on material.
        */

        public int getItemEnchantability()
        {
            return 1;
        }
     
        @SideOnly(Side.CLIENT)
        public void func_94581_a(IconRegister par1IconRegister)
        {
            super.func_94581_a(par1IconRegister);
            this.field_94600_b = new Icon[field_94601_a.length];
     
            for (int i = 0; i < this.field_94600_b.length; ++i)
            {
                this.field_94600_b[i] = par1IconRegister.func_94245_a(field_94601_a[i]);
            }
        }
     
        @SideOnly(Side.CLIENT)
        public Icon func_94599_c(int par1)
        {
            return this.field_94600_b[par1];
        }
     
    public Item setItemName(String string) {
    // TODO Auto-generated method stub
    return null;
    }
    public void func_94332_a(IconRegister par1IconRegister)
        {
            this.iconIndex = par1IconRegister.func_94245_a("GunMod:Gun");
        }
    }
    Les dossiers :
    [​IMG]
    La console :
    [​IMG]
    :(
     
  6. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    heu, tu as du fail, il n'y a rien après "les dossiers :" et "la console :"
     
    • Gagnant Gagnant x 1
  7. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 231
    Points:
    304
    Sexe:
    Homme
    Oui j'ai cliquer sans vouloir --'
     
  8. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Tient on dirait que forge cherche la texture dans textures/items/Gun.png à la place de mods/GunMod/textures/items/Gun.png
    Je sais pas d'où ça viens, je regarde
     
  9. Kanar

    Kanar Ami des Creepers

    Inscrit:
    5 Nov 2012
    Messages:
    11 119
    Points:
    304
    Sexe:
    Homme
    Il m'arrive le même problème, je suis pour l'instant obligé de glisser mes textures dans les sous-dossier approprié du minecraft.jar ce qui n'est pas utile. :/
     
  10. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Quel build de forge ?
    Personnellement j'utilise le 608, j'ai pas de problème.
    Aussi, vérifie que tu as bien mit le "@Override" avant la fonction, ça peut venir de la, mais je suis pas sûr
     
  11. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 231
    Points:
    304
    Sexe:
    Homme
    build 582
     
  12. Swoonix

    Swoonix Résident de l'End

    Inscrit:
    21 Juil 2012
    Messages:
    6 910
    Points:
    219
    Si c'est pour SlimUse, tout est réglé.
     
  13. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Mis à jour pour les nouveaux nom de mcp 7.44 (build de forge 650+)
    updateIcons -> registerIcons
    iconIndex -> itemIcon
     

Partager cette page