• 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

Création d'un arc

Tutoriels des membres
1.7.10
12
40
9.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.
  • Yeyvo
    Yeyvo dernière édition par robin4002 1 déc. 2019, 10:39 27 juin 2016, 02:26

    Sommaire

    • Introduction
    • Pré-requis
    • Code
      1. La classe principale
      2. La classe de l’arc
      3. Quelques explications
      4. Les textures
    • Résultat
    • Crédits

    Introduction

    Dans ce tutoriel, nous allons créer un arc que l’on pourras customisé.

    Pré-requis

    • Avoir quelque connaissance en java
    • s’avoir comment créer un item
    • un chwiya de matière grise

    Code

    La classe principale :

    Dans un premier temps nous allons crée l’item et nous allons le register je ne vais pas revenir sur ces points la 😛
    Bon voila mon code

    obsidianBow= new obsidianBow.setUnlocalizedName("obsidianBow").setTextureName(MODID+ ":obsidian_bow").setCreativeTab(CreativeTabs.tabCombat);
    

    pour le " .setTextureName(MODID+ “:obsidian_bow_”) " on choisit la texture de base de l’arc (celle ou il n’est pas bander)
    On auras une erreur donc il faudra créer la classe “obsidianBow” .

    La classe de l’arc :

    une fois la classe créer on l’extends a ItemBow (en gros nous allons créer un item est le customisé afin d’avoir un arc )

    et on y ajoute :

    //les variables
    public static final String[] bowPullIconNameArray = new String[] {"1", "2", "3"}; // c'est pour les textures
    @SideOnly(Side.CLIENT)
    private IIcon[] iconArray;
    /*
    *Le constructeur de l'arc
    */
    public obsidianBow( )
    {
    this.maxStackSize = 1;
    this.setMaxDamage(800);
    this.setCreativeTab(CreativeTabs.tabCombat);
    }
    /*
    * appelé lorsque le joueur relâche l'item, c'est aussi ici ou son géré les différent enchantement comme l'infinité, c'est la aussi ou l'on vas ajouté des amélioration pour notre arc
    */
    public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int par4)
    {
    int j = this.getMaxItemUseDuration(stack) - par4;
    ArrowLooseEvent event = new ArrowLooseEvent(player, stack, j);
    MinecraftForge.EVENT_BUS.post(event);
    if (event.isCanceled())
    {
    return;
    }
    j = event.charge;
    boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
    if (flag || player.inventory.hasItem(Item.arrow))
    {
    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(world, player, f * 2.0F);
    if (f == 1.0F)
    {
    entityarrow.setIsCritical(true);
    }
    int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);
    if (k > 0)
    {
    entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    }
    int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack);
    if (l > 0)
    {
    entityarrow.setKnockbackStrength(l);
    }
    if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0)
    {
    entityarrow.setFire(100);
    }
    stack.damageItem(1, player);
    world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    if (flag)
    {
    entityarrow.canBePickedUp = 2;
    }
    else
    {
    player.inventory.consumeInventoryItem(Item.arrow);
    }
    if (!world.isRemote)
    {
    world.spawnEntityInWorld(entityarrow);
    }
    }
    }
    /*
    * Combien de temps il faut pour utiliser l'item
    */
    public int getMaxItemUseDuration(ItemStack stack)
    {
    return 80000;
    }
    /*
    *renvoie l'action qui spécifie ce que l'animation à jouer lorsque l'item et utilisé
    */
    public EnumAction getItemUseAction(ItemStack stack)
    {
    return EnumAction.bow;
    }
    /*
    * Appelé à chaque fois que cet objet est équipé et le bouton droit de la souris est enfoncé
    */
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    ArrowNockEvent event = new ArrowNockEvent(player, stack);
    MinecraftForge.EVENT_BUS.post(event);
    if (event.isCanceled())
    {
    return event.result;
    }
    if (player.capabilities.isCreativeMode || player.inventory.hasItem(Item.arrow))
    {
    player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
    }
    return stack;
    }
    /*
    * retourne le niveaux d'enchanbilité de l'arc.
    */
    public int getItemEnchantability()
    {
    return 1;
    }
    @SideOnly(Side.CLIENT) //vus que le render doit étre sur le client
    public void registerIcons(IIconRegister IconRegister)
    {
    this.itemIcon = IconRegister.registerIcon(this.getIconString());
    this.iconArray = new IIcon[bowPullIconNameArray.length];
    for (int i = 0; i < this.iconArray.length; ++i)
    {
    this.iconArray[i] = IconRegister.registerIcon(this.getIconString() + "_" + bowPullIconNameArray[i]);
    }
    }
    /*
    * utilisé pour faire défiler les textures en fonction de leur durée utilisée on utilise le tableaux
    */
    @Override
    public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
    {
    if(usingItem != null && usingItem.getItem().equals(this))
    {
    int k = usingItem.getMaxItemUseDuration() - useRemaining;
    if(k >= 18)
    return iconArray[2];
    if(k > 13)
    return iconArray[1];
    if(k > 0)
    return iconArray[0];
    }
    return getIconIndex(stack);
    }
    }

    Quelques explications :

    public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int par4)
    {
    int j = this.getMaxItemUseDuration(stack) - par4;
    ArrowLooseEvent event = new ArrowLooseEvent(player, stack, j);
    MinecraftForge.EVENT_BUS.post(event);
    if (event.isCanceled())
    {
    return;
    }
    j = event.charge;
    boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
    if (flag || player.inventory.hasItem(Item.arrow))
    {
    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(world, player, f * 2.0F);
    if (f == 1.0F)
    {
    entityarrow.setIsCritical(true);
    }
    int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);
    if (k > 0)
    {
    entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    }
    int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack);
    if (l > 0)
    {
    entityarrow.setKnockbackStrength(l);
    }
    if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0)
    {
    entityarrow.setFire(100);
    }
    stack.damageItem(1, player);
    world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    if (flag)
    {
    entityarrow.canBePickedUp = 2;
    }
    else
    {
    player.inventory.consumeInventoryItem(Item.arrow);
    }
    if (!world.isRemote)
    {
    world.spawnEntityInWorld(entityarrow);
    }
    }
    }

    C’est cette méthode qui les différent enchantements , la puissance, la vitesse de bandage de l’arc ainsi que le lancé de la flèche (consommation dans l’inventaire) est aussi ici ou l’on vas pouvoir customisé notre arc .

    public void registerIcons(IIconRegister IconRegister)
    {
    this.itemIcon = IconRegister.registerIcon(this.getIconString());
    this.iconArray = new IIcon[bowPullIconNameArray.length];
    for (int i = 0; i < this.iconArray.length; ++i)
    {
    this.iconArray[i] = IconRegister.registerIcon(this.getIconString() + "_" + bowPullIconNameArray[i]);
    }
    }

    Cette méthode registre les nouvelles textures de l’arc grâce aux tableaux créer juste avant elle ajoutes les string enregistré dans le tableaux au nom de la texture de base de l’arc

    @Override
    public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
    {
    if(usingItem != null && usingItem.getItem().equals(this))
    {
    int k = usingItem.getMaxItemUseDuration() - useRemaining;
    if(k >= 18)
    return iconArray[2];
    if(k > 13)
    return iconArray[1];
    if(k > 0)
    return iconArray[0];
    }
    return getIconIndex(stack);
    }

    Celle la fait défilé les textures enregistré grâce a la méthode précédente en fonction du temps de bandage c’est grâce a cette méthode que l’on change la texture de l’arc

    Les textures :

    Si vous vous en rappelé le nom de ma texture de base est " obsidian_bow " et dans l’array de la class de l’arc on a utilisé les valeur suivantes " “1”, “2”, “3” " donc mes textures devrais êtres successivement appelé :
    " obsidian_bow"
    " obsidian_bow_1 "
    " obsidian_bow_2 "
    " obsidian_bow_3 "
    le " _ " vien du faite que l’on ai mis " + “_” + " dans la méthode qui permet de register les différentes textures .
    Comme dans cette image :

    Résultat

    Le commits Github : https://github.com/Yeyvo/Tutorial-Bow-forge/

    Crédits

    Rédaction :

    • Yeyvo

    Correction :

    1 réponse Dernière réponse Répondre Citer 0
    • Tristepin
      Tristepin dernière édition par 27 juin 2016, 03:05

      Belle initiative ce tutoriel surtout que j’avais justement besoin de créer l’arc d’Eva ^^

      Modélisateur sur son temps libre.

      1 réponse Dernière réponse Répondre Citer 0
      • Yeyvo
        Yeyvo dernière édition par 27 juin 2016, 03:07

        @‘Tristepin’:

        Belle initiative ce tutoriel surtout que j’avais justement besoin de créer l’arc d’Eva ^^

        Merci 🙂 " La petite référence a Wakfu 🙂 "

        Si vous avez n’importe quelle suggestion je suis a l’écoute 🙂

        1 réponse Dernière réponse Répondre Citer 0
        • BrokenSwing
          BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 27 juin 2016, 04:15

          Balise de version, on peut deviner que c’est la 1.7 mais met la quand même

          1 réponse Dernière réponse Répondre Citer 0
          • Yeyvo
            Yeyvo dernière édition par 27 juin 2016, 04:25

            @‘BrokenSwing’:

            Balise de version, on peut deviner que c’est la 1.7 mais met la quand même

            oups j’avais complètement oublié mercii

            1 réponse Dernière réponse Répondre Citer 0
            • Tristepin
              Tristepin dernière édition par 27 juin 2016, 07:03

              Ah zut j’avais pas deviné moi ^^ c’est compatible avec la 1.8.9 ?

              Envoyé de mon SM-G110H en utilisant Tapatalk

              Modélisateur sur son temps libre.

              1 réponse Dernière réponse Répondre Citer 0
              • BrokenSwing
                BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 27 juin 2016, 07:05

                Ça devrait plus ou moins l’être, c’est quand même différents en 1.8 à cause des changements avec les BlockPos et les jsons

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

                  Tout ce qui en rapport avec la gestion de texture est différent en 1.9.

                  1 réponse Dernière réponse Répondre Citer 0
                  • Yeyvo
                    Yeyvo dernière édition par 27 juin 2016, 08:18

                    Vous n’aurez  sur une idée pour un bonus par hasard ?

                    1 réponse Dernière réponse Répondre Citer 0
                    • LeBossMax2
                      LeBossMax2 dernière édition par 27 juin 2016, 08:48

                      Ça pourrait être bien, pour le bonus de mettre des effets de potion sur les flèches !

                      1 réponse Dernière réponse Répondre Citer 0
                      • leo01418
                        leo01418 dernière édition par 27 juin 2016, 09:31

                        Bon tuto pour les debutant ^^

                        Voila ma signature

                        1 réponse Dernière réponse Répondre Citer 0
                        • Yeyvo
                          Yeyvo dernière édition par 27 juin 2016, 09:51

                          @‘LeBossMax2’:

                          Ça pourrait être bien, pour le bonus de mettre des effets de potion sur les flèches !

                          Le tutoriel parle plutôt des arc mais bon pourquoi pas ,je pourrait directement ajouté les effet directement sur l’arc 🙂

                          @‘leo01418’:

                          Bon tuto pour les debutant ^^

                          Merci leo

                          1 réponse Dernière réponse Répondre Citer 0
                          • moscaphone421
                            moscaphone421 dernière édition par 27 juin 2016, 09:56

                            Pourquoi pas :
                            Lorsque la fleche touche un bloc mais UNIQUEMENT avec ton arc ça le fait exploser ?
                            Et fleche tirable uniquement par ton arc aussi

                            1 réponse Dernière réponse Répondre Citer 0
                            • Yeyvo
                              Yeyvo dernière édition par 27 juin 2016, 10:10

                              @‘moscaphone421’:

                              Pourquoi pas :
                              Lorsque la fleche touche un bloc mais UNIQUEMENT avec ton arc ça le fait exploser ?
                              Et fleche tirable uniquement par ton arc aussi

                              Bonne idée je verrait ça

                              1 réponse Dernière réponse Répondre Citer 0
                              • Deleted
                                Deleted dernière édition par 27 juin 2016, 11:37

                                Salut
                                Sympa de ta part d’avoir pris l’initiative seul de créer ce tuto, cependant j’ai juste 2, 3 petites remarques 😃 rien de bien méchant…

                                1. Attention à la convention Java, juste pour ce qui est du nom de ton item : obsidian_bow_ —> obsidianBow, du coup pareil pour le setUnlocalizedName et pour le setTextureName, c’est toi qui gère la gestion de tes ressources, donc libre à toi de renommer ou pas. Mais aussi concernant le nom de ta classe, ça c’est juste horrible xD

                                2. Ensuite le [font=monospace@SideOnly]font=monospace concernant ta variable iconArray est inutile, puisque elle n’est appelée que dans les méthodes registerIcons() et getIcon(), qui sont elles-même déjà client side only …

                                3. Attention à quelque petites fautes d’orthographe qui se baladent. De toutes manières un correcteur passera par là, ce n’est pas ce qui manque sur MFF 😄

                                4. Et enfin renomme les paramètres des méthodes que t’utilises pour + de clarté et pour limiter les copié-collé du code de Mojang ^^’
                                  Genre pour les méthodes suivantes : [font=monospaceonPlayerStoppedUsing(), onItemRightClick(), getIcon(), etc…]

                                Sinon très bon tuto, et merci de ta part de faire partager ton savoir à la communauté =D

                                1 réponse Dernière réponse Répondre Citer 0
                                • moscaphone421
                                  moscaphone421 dernière édition par 27 juin 2016, 12:33

                                  Juste un tuto sur créer une dynamite serait bien non ?
                                  Car après en avoir fait plus de 6 je pense que c’est beaucoup demander
                                  Le tuto en lui meme est cool mais il aurait fallut expliquer des trucs en poussant plus non ?

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Yeyvo
                                    Yeyvo dernière édition par 27 juin 2016, 19:26

                                    @‘Plaigon’:

                                    Salut
                                    Sympa de ta part d’avoir pris l’initiative seul de créer ce tuto, cependant j’ai juste 2, 3 petites remarques 😃 rien de bien méchant…

                                    1. Attention à la convention Java, juste pour ce qui est du nom de ton item : obsidian_bow_ —> obsidianBow, du coup pareil pour le setUnlocalizedName et pour le setTextureName, c’est toi qui gère la gestion de tes ressources, donc libre à toi de renommer ou pas. Mais aussi concernant le nom de ta classe, ça c’est juste horrible xD

                                    2. Ensuite le [font=monospace@SideOnly]font=monospace concernant ta variable iconArray est inutile, puisque elle n’est appelée que dans les méthodes registerIcons() et getIcon(), qui sont elles-même déjà client side only …

                                    3. Attention à quelque petites fautes d’orthographe qui se baladent. De toutes manières un correcteur passera par là, ce n’est pas ce qui manque sur MFF 😄

                                    4. Et enfin renomme les paramètres des méthodes que t’utilises pour + de clarté et pour limiter les copié-collé du code de Mojang ^^’
                                      Genre pour les méthodes suivantes : [font=monospaceonPlayerStoppedUsing(), onItemRightClick(), getIcon(), etc…]

                                    Sinon très bon tuto, et merci de ta part de faire partager ton savoir à la communauté =D

                                    toutes les remarques sont la bienvenue 🙂

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • SCAREX
                                      SCAREX dernière édition par 29 juin 2016, 17:36

                                      @‘Plaigon’:

                                      1. Ensuite le [font=monospace@SideOnly]font=monospace concernant ta variable iconArray est inutile, puisque elle n’est appelée que dans les méthodes registerIcons() et getIcon(), qui sont elles-même déjà client side only …

                                      Pas forcément puisque ça évite d’enregistrer une array inutilement qui va prendre de la mémoire (certes très peu mais si ton mod contient beaucoup d’icônes ça peut faire une petite différence)

                                      Site web contenant mes scripts : http://SCAREXgaming.github.io

                                      Pas de demandes de support par MP ni par skype SVP.
                                      Je n'accepte sur skype que l…

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • environ 7 jours
                                      • V
                                        volts_spk dernière édition par 7 juil. 2016, 00:53

                                        Salut, merci pour ton tuto, il fonctionne très bien ! Seul petit problème, mon arc ne peut avoir que “Solidité” en enchantement…

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Yeyvo
                                          Yeyvo dernière édition par 7 juil. 2016, 01:03

                                          Tu as ait tout ccomme moi ?

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • 1
                                          • 2
                                          • 1 / 2
                                          1 sur 40
                                          • Premier message
                                            1/40
                                            Dernier message
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB