MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Item lanceur de projectile

    Planifier Épinglé Verrouillé Déplacé Sans suite
    15 Messages 4 Publieurs 4.6k Vues 1 Watching
    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.
    • CoolNonoC Hors-ligne
      CoolNono
      dernière édition par

      Salut à tous, j’ai beaucoup été aidé par ce forum et Ironcraft aussi mais certains problèmes me tracassent.
      Donc j’ai récemment commencé la création de mon premier mod en 1.6.2/1.6.4 et de tout ce que j’ai cherché, il y a une ou deux petites preuves de quelque chose que je possède et que j’ai nommé “ignorance”, et donc j’ai besoin de vous.
      J’utilise le build 9.11.1.934 en 1.6.4 de forge.
      Donc je ne vous demanderez pas de vous adresser à moi comme à un nul/débutant mais faites pas comme si j’étais un pro non plus 😛

      Bon ce que vous attendez tous : la problématique, et bien la voici :

      Comme vous l’avez sûrement vus dans le titre, je travaille sur des items lanceurs de projectiles (= pistolets pour ceux qui ont pas compris). J’ai beaucoup cherché, et cela à été récompensé par la plupart des sujet/tutos sur les deux forums en question (voir plus haut), notamment par les questions de Nolan-XX (déso si j’écorche le nom). Donc j’ai mis un timer, j’ai créé un projectile, j’ai attribué le clique droit au zoom (avec un overlay) et… ben… voilà.
      Etant donné que la fonction de ItemStack “onItemRightClick” est déjà utilisée pour le zoom, j’aimerai savoir comment transformer ça :

      public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
      
      {
      
      if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(MonMod.MonProjectile.itemID))
      {
      
      if(shootTimer == 0)
      {
      par2World.spawnEntityInWorld(new EntityMonProjectile(par2World, par3EntityPlayer, 4.0F));
      par3EntityPlayer.inventory.consumeInventoryItem(MonMod.MonProjectile.itemID);
      shootTimer = 15;
      }
      
      }
      
      return par1ItemStack;
      
      }
      

      de manière à utiliser le clique gauche de la souris.

      Autres questions : serait-il possible qu’au lieu de consommer 1 MonProjectile à chaque tire j’ai un MonProjectile qui s’use petit à petit à chaque tire et que l’usure se bloque juste avant de se casser et qu’on puisse plus tirer (Le pistolet utilise l’usure de MonProjectile en gros) ?
      Mon pistolet marche mais il ne fait pas de dégâts aux entités :huh:.
      Comment déclarer mon projectile dans RenderManager sans modifier cette classe (j’ai réussi pour EntityList) ? Parce que là, mon pistolet envoie des entités qui n’applique pas la texture que je veux.
      Si je ne change pas de méthode pour les munitions, ce n’est pas très grave mais là à chaque fois que j’ouvre mon inventaire/un autre gui ou que je me déco/reco ou autre mon stock de “MonProjectile” que je me suis givé se réinnitialise et revient à 64 (donc on peut en avoir à l’infini :s)

      Si vous désirez plus de détails, demandez-moi.

      :heart: Fairy Tail
      :heart: Zelda
      :heart: geeker
      :@ ma soeur

      1 réponse Dernière réponse Répondre Citer 0
      • Nolan-XXN Hors-ligne
        Nolan-XX
        dernière édition par

        Exactement le même problème que toi.
        Mais le fait que le pistolet n’use pas de vie au mob viens du Timer , c’est la seule chose que je peux te dire.

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002R Hors-ligne
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
          dernière édition par

          Je viens de penser à un truc, mets le tout dans une condition if(!par1World.isremote) c’est peut être un problème de side pour les dégât.

          Pour le rendu, FML à une fonction :
          RenderingRegistry.registerEntityRenderingHandler(LaClasseDeL’entités.class, new MonRender(taille de l’ombre));

          Pour que la recharge s’use, il faut que tu rende l’item damage (this.setMaxDamage(duré max); dans le constructeur), que tu fasse une boucle pour tester tout les items de l’inventaire, et s’il trouve la recharge, il l’use.

          Et pour le clic gauche :

          public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
          {
          return false;
          }
          
          1 réponse Dernière réponse Répondre Citer 1
          • CoolNonoC Hors-ligne
            CoolNono
            dernière édition par

            Donc je récapitule :

            lorsque je fais “RenderingRegistry.registerEntityRenderingHandler(EntityMonProjectile.class, new RenderMonProjectile(0.5F));” , il y a une erreur à RenderMonProjectile et ça dit : “Cannot instantiate the type RenderMonProjectile”. (Bien entendu ils s’appellent pas MonProjectile et tout ça mais je change les noms car c’est la surprise :D).
            J’ai remplacé :

            public ItemStack onItemRightClick(ItemStack itemStack, EntityPlayer player, Entity entity, World world)
            
            {
            
            if (player.capabilities.isCreativeMode || player.inventory.hasItem(Laser_Mod.Laser.itemID))
            {
            
            if(shootTimer == 0)
            {
            world.spawnEntityInWorld(new EntityLaser(world, player, 4.0F));
            shootTimer = 15;
            }
            
            }
            
            return itemstack;
            
            }
            

            par

            public boolean onLeftClickEntity(ItemStack itemStack, EntityPlayer player, Entity entity, World world)
            
            {
            
            if (player.capabilities.isCreativeMode || player.inventory.hasItem(Laser_Mod.Laser.itemID))
            {
            
            if(shootTimer == 0)
            {
            world.spawnEntityInWorld(new EntityLaser(world, player, 4.0F));
            shootTimer = 15;
            }
            
            }
            
            return false;
            
            }
            

            Mais lorsque dans le jeu je fais clic gauche ça ne fait rien.

            Ensuite j’ai mis une usure limitée pour mon item projectile mais là je ne sais pas comment mettre une boucle truc bidule muche dans l’inventaire et user un autre item que mon pistolet.

            Et pour finir où mettre le if(World.isRemote…) ?
            Désolé pour la gêne occasionnée (lol ça fait sérieux) désolé si je suis un peu chiant ou si j’arrive pas à appliquer ce qu’on me dit. (en fait, je retire ce que j’ai dit. parlez-moi comme à un débutant --)__
            À oui une dernière chose qui a rien à voir, moi aussi je m’appelle Nolan xD

            :heart: Fairy Tail
            :heart: Zelda
            :heart: geeker
            :@ ma soeur

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002R Hors-ligne
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
              dernière édition par

              Ha, cette fonction n’est que exécuté quand tu fais un clic gauche sur une entités, j’ai mal lu la doc :
              “Called when the player Left Clicks (attacks) an entity.”
              Et il n’y a pas de paramètre World.
              Il n’y a pas d’autre fonction en rapport avec le clic gauche 😕
              Le !world.isremote, dans toute la fonction, donc comme ça :

              public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
              {
              if(!world.isRemote)
              {
              if(player.capabilities.isCreativeMode || player.inventory.hasItem(Laser_Mod.Laser.itemID))
              {
              if(shootTimer == 0)
              {
              world.spawnEntityInWorld(new EntityLaser(world, player, 4.0F));
              shootTimer = 15;
              for(int slotID = 0; slotID < player.inventory.getSizeInventory(); slotID++)
              {
              ItemStack ammo = player.inventory.getStackInSlot(slotID);
              if(ammo.itemID == Mod.Munition.itemID)
              {
              ammo.damageItem(1, player);
              break;
              }
              }
              }
              }
              }
              return stack;
              }
              

              Je peux voir la classe de ton rendu ?

              Pour la boucle for, tu as la réponse dans le code au dessus.

              1 réponse Dernière réponse Répondre Citer 0
              • CoolNonoC Hors-ligne
                CoolNono
                dernière édition par

                J’ai fail -- j’ai pas changer tous les noms xD__

                import net.minecraft.client.renderer.Tessellator;
                import net.minecraft.client.renderer.entity.Render;
                import net.minecraft.entity.Entity;
                import net.minecraft.util.ResourceLocation;
                
                import org.lwjgl.opengl.GL11;
                import org.lwjgl.opengl.GL12;
                
                import cpw.mods.fml.relauncher.Side;
                import cpw.mods.fml.relauncher.SideOnly;
                
                public abstract class RenderLaser extends Render
                {
                
                private float size;
                
                public RenderLaser(float size)
                {
                
                this.size = size;
                
                }
                
                @Override
                public void doRender(Entity entity, double d0, double d1, double d2, float f, float f1)
                {
                this.doRenderLaser((EntityLaser)entity, d0, d1, d2, f, f1);
                }
                
                private void doRenderLaser(EntityLaser entity, double d0, double d1, double d2, float f, float f1)
                {
                GL11.glPushMatrix();
                
                GL11.glTranslatef((float)d0, (float)d1, (float)d2);
                
                GL11.glEnable(GL12.GL_RESCALE_NORMAL);
                
                float var10 = this.size;
                
                GL11.glScalef(var10 / 1.0F, var10 / 1.0F, var10 / 1.0F);
                
                byte var11 = 0;
                
                this.loadTexture("laser_mod", "textures/entity/Laser.png");
                
                Tessellator var12 = Tessellator.instance;
                
                float var13 = (float)(var11 % 16 * 16 + 0) / 16.0F;
                
                float var14 = (float)(var11 % 16 * 16 + 16) / 16.0F;
                
                float var15 = (float)(var11 / 16 * 16 + 0) / 16.0F;
                
                float var16 = (float)(var11 / 16 * 16 + 16) / 16.0F;
                
                float var17 = 1.0F;
                
                float var18 = 0.5F;
                
                float var19 = 0.25F;
                
                GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
                
                GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
                
                var12.startDrawingQuads();
                
                var12.setNormal(0.0F, 1.0F, 0.0F);
                
                var12.addVertexWithUV((double)(0.0F - var18), (double)(0.0F - var19), 0.0D, (double)var13, (double)var16);
                
                var12.addVertexWithUV((double)(var17 - var18), (double)(0.0F - var19), 0.0D, (double)var14, (double)var16);
                
                var12.addVertexWithUV((double)(var17 - var18), (double)(1.0F - var19), 0.0D, (double)var14, (double)var15);
                
                var12.addVertexWithUV((double)(0.0F - var18), (double)(1.0F - var19), 0.0D, (double)var13, (double)var15);
                
                var12.draw();
                
                GL11.glDisable(GL12.GL_RESCALE_NORMAL);
                
                GL11.glPopMatrix();
                
                }
                
                private void loadTexture(String string, String string2)
                {
                
                }
                
                }
                
                

                Voilà pour la classe de mon rendu…

                :heart: Fairy Tail
                :heart: Zelda
                :heart: geeker
                :@ ma soeur

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002R Hors-ligne
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                  dernière édition par

                  abstract
                  Pas normal, ta classe ne devrait pas être abstraite.

                  1 réponse Dernière réponse Répondre Citer 0
                  • CoolNonoC Hors-ligne
                    CoolNono
                    dernière édition par

                    Si ça t’intéresse j’ai utilisé ce tuto (yen a pas 250 des comme ça) : Créer un projectile___
                    J’ai enlevé le abstract, add les methods implements (traducteur de fou :D) et ça ma rajouté en bas un

                    @Override
                    protected ResourceLocation getEntityTexture(Entity entity)
                    {
                    return null;
                    }
                    

                    Et maintenant la ligne RenderingRegistry.registerEntityRenderingHandler(EntityLaser.class, new RenderLaser(0.5F)); n’a pas d’erreur.

                    :heart: Fairy Tail
                    :heart: Zelda
                    :heart: geeker
                    :@ ma soeur

                    1 réponse Dernière réponse Répondre Citer 0
                    • jglrxavpokJ Hors-ligne
                      jglrxavpok Modérateurs
                      dernière édition par

                      Pour ton problème de clic gauche, voici (une partie de) la solution:

                      public boolean onEntitySwing(EntityLivingBase e, ItemStack s)
                      {
                      if(e instanceof EntityPlayer)
                      {
                      EntityPlayer player = (EntityPlayer)e;
                      boolean flag = false;
                      if(player.capabilities.isCreativeMode)
                      {
                      flag = true;
                      }
                      else
                      {
                      flag = player.inventory.consumeInventoryItem(ModHL2.modInstance.magnumAmmo.itemID);
                      }
                      if(flag)
                      {
                      EntityBullet bullet = new EntityBullet(e.worldObj, e, false, "magnum", 15, 64);
                      if(!e.worldObj.isRemote)
                      e.worldObj.spawnEntityInWorld(bullet);
                      e.worldObj.playSoundAtEntity(e, "hl2:magnum_fire", 0.5f, 1);
                      
                      }
                      else
                      e.worldObj.playSoundAtEntity(e, "hl2:weapon_empty", 0.5f, 1);
                      }
                      return true;
                      }
                      

                      Cette méthode consiste ainsi:
                      Dès qu’une entitée “balance son bras” avec l’objet (clic gauche pour le joueur), on vérifie si c’est un joueur, si oui on tire, sinon, on fait rien 🙂 (et je te laisse les sons + vérification des munitions au cas où tu en aurais besoin)

                      Modérateur sur MFF. 
                      Mon Github: http://github.com/jglrxavpok
                      Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

                      1 réponse Dernière réponse Répondre Citer 0
                      • CoolNonoC Hors-ligne
                        CoolNono
                        dernière édition par

                        Ok merci 🙂

                        :heart: Fairy Tail
                        :heart: Zelda
                        :heart: geeker
                        :@ ma soeur

                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          Faut que tu return sur ta texture :

                          @Override
                          protected ResourceLocation getEntityTexture(Entity entity)
                          {
                          return texture;
                          }
                          

                          Et en haut de ta classe :

                          public static ResourceLocation texture = new ResourceLocation("laser_mod", "textures/entity/Laser.png");
                          

                          Et tu peux supprimer la méthode loadTexture que ne fonctionnera pas de toute façon.

                          1 réponse Dernière réponse Répondre Citer 0
                          • CoolNonoC Hors-ligne
                            CoolNono
                            dernière édition par

                            Ok ! J’essaie tout ça !___
                            Et merci d’avoir validé mon tuto :D___
                            Dis-moi xavpok stp à quoi correspondent les valeurs “15” et “64” ?

                            :heart: Fairy Tail
                            :heart: Zelda
                            :heart: geeker
                            :@ ma soeur

                            1 réponse Dernière réponse Répondre Citer 0
                            • jglrxavpokJ Hors-ligne
                              jglrxavpok Modérateurs
                              dernière édition par

                              Les valeurs 15 et 64 de EntityBullet ?
                              Laisse tomber, c’est juste pour mon code, je suis trop flemmard pour faire des EntityBullet pour chaque arme x)

                              Modérateur sur MFF. 
                              Mon Github: http://github.com/jglrxavpok
                              Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

                              1 réponse Dernière réponse Répondre Citer 0
                              • CoolNonoC Hors-ligne
                                CoolNono
                                dernière édition par

                                A ok… (flemmard :D)

                                :heart: Fairy Tail
                                :heart: Zelda
                                :heart: geeker
                                :@ ma soeur

                                1 réponse Dernière réponse Répondre Citer 0
                                • CoolNonoC Hors-ligne
                                  CoolNono
                                  dernière édition par

                                  Vive la 1.7 !!!
                                  (Oui, c’était ironique…) 😕

                                  :heart: Fairy Tail
                                  :heart: Zelda
                                  :heart: geeker
                                  :@ ma soeur

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • 1 / 1
                                  • Premier message
                                    Dernier message
                                  Design by Woryk
                                  ContactMentions Légales

                                  MINECRAFT FORGE FRANCE © 2024

                                  Powered by NodeBB