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

    Résolu Comment utiliser spawnEntity svp

    1.7.x
    1.7.10
    7
    24
    4753
    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.
    • Folgansky
      Folgansky Correcteurs dernière édition par

      Bonsoir/Bonjour,

      Question bien noob mais je triture les méthodes en vain.

      J’ai un cheval avec un rendu spécial, je le fais actuellement spawn avec l’oeuf associé, cependant j’aimerais simplement créer un item avec une texture qui ressemble au model custom afin de faire spawn mon “cheval” custom de façon plus cohérente.

      J’ai essayé avec ce code que j’ai trouvé sur le net qui donne à peu près:

      [size=x-smallpackage com.hk.testing.grenademod;
      import com.hk.testing.Main;
      import com.hk.testing.entities.EntityEntityOrb;import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.entity.EntityList;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.world.World;
      public class ItemGrenade extends Item
      {
      public ItemGrenade()
      {
      this.setUnlocalizedName("grenade"); //Sets the name of this item, Has to be unique!
      this.setCreativeTab(CreativeTabs.tabCombat); //This Item will be in the Combat Creative Tab!
      this.setTextureName(GrenadeMod.MODID + ":" + "grenade"); //The texture for this item is the Grenade!
      }
      
      /**
      * 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)
      {
      //This if statement is here to check that the Server is working
      if (!par2World.isRemote)
      {
      /* This method in World spawn in an entity,
      * You can use with anything that extends
      * the Entity class, in this case it's
      * the EntityGrenade class
      */
      par2World.spawnEntityInWorld(new EntityGrenade(par2World, par3EntityPlayer));
      //Decrease an item from the stack because you used it!
      –par1ItemStack.stackSize;
      } return par1ItemStack;
      }
      
      /**
      * Render Pass sensitive version of hasEffect()
      */
      public boolean hasEffect(ItemStack par1ItemStack, int pass)
      {
      //This means it will look "special" in the inventory
      return true;
      }
      }]
      

      Voilà dedans je n’avais récupéré que la fonction de spawnEntity avec pour “NomdemonEntity” à la place de EntityGrenade et visiblement ça ne fonctionne pas aussi simplement. Car au passage il me faisait rajouter (EntityPlayer player) à mon constructeur de mon cheval custom.

      Vous avez vite compris que je n’ai pas un niveau vraiment passable et je m’en excuse d’avance auprès de ceux que ça irrite.

      1 réponse Dernière réponse Répondre Citer 0
      • Deleted
        Deleted dernière édition par

        Ton cheval custom s appelle EntityGrenade ?

        1 réponse Dernière réponse Répondre Citer 0
        • Superloup10
          Superloup10 Modérateurs dernière édition par

          Tu veux faire quoi exactement quand tu dis le faire spawné de façon plus cohérente?

          Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

          Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

          1 réponse Dernière réponse Répondre Citer 0
          • DiabolicaTrix
            DiabolicaTrix Correcteurs Moddeurs confirmés dernière édition par

            De ce que j’ai compris, je crois qu’il veut un nouvel item car l’oeuf n’est pas cohérent pour un cheval. (C’est pas faux)

            1 réponse Dernière réponse Répondre Citer 0
            • Folgansky
              Folgansky Correcteurs dernière édition par

              Oui voilà DiabolicaTrix a compris.

              Et non Julot c’est un bout de code d’un tutoriel que j’ai pu trouver parlant d’un Item qui fait Spawn une entité mais qui ne m’a pas aidé à comprendre comment l’utiliser à mes fins.

              Pour préciser, j’ai actuellement 4 oeufs qui font spawn un BMX, une moto, un buggy ou encore un kart.
              J’aimerais pouvoir utiliser d’autres items ayant le même effet, quand je clique droit ça consomme l’item (en survival) et ça fait spawn l’entité voulue.

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

                Quelle est l’erreur afficher quand tu mets ton entité ? Quel est le constructeur de la classe de ton entité ?

                1 réponse Dernière réponse Répondre Citer 0
                • Folgansky
                  Folgansky Correcteurs dernière édition par

                  @‘robin4002’:

                  Quelle est l’erreur afficher quand tu mets ton entité ? Quel est le constructeur de la classe de ton entité ?

                  Voici ce que j’ai quand je mets bêtement le bout de code:

                  Pour le constructeur de EntityMoto:

                  public EntityMoto(World model)
                  {
                      super(model);
                      }
                  

                  je rajoute le RenderMoto en cas:

                  public class RenderMoto extends RenderLiving
                  {
                      public final ResourceLocation texture = new ResourceLocation("Modpg:textures/entity/Moto.png");
                  
                      public RenderMoto(ModelBase model, float shadow)
                      {
                          super(model, shadow);
                      }
                  
                  private ResourceLocation getMotoTexture(EntityMoto moto)
                      {
                          return texture;
                      }
                  
                      @Override
                      protected ResourceLocation getEntityTexture(Entity entity)
                      {
                          return this.getMotoTexture((EntityMoto)entity);
                      }
                  }
                  

                  Edit: quand je suis la première solution d’Eclipse, l’entité ne spawn tout simplement pas en cliquant. (ce qui doit vous paraître évident)
                  Edit:quand je change le constructeur en:

                  public EntityMoto(World model, EntityPlayer par3EntityPlayer)
                  {
                      super(model);
                      }
                  

                  Pareil, rien ne spawn. Et l’oeuf ne fait plus rien spawn non plus d’ailleurs.

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

                    C’est normal …
                    Ton constructeur n’a que le paramètre world. Donc pas besoin de mettre le player.
                    Et les coordonnées ne sont pas set, donc ça reste sur 0,0,0
                    Il faut utiliser :

                    EntityMoto e = new EntityMoto(world);
                    e.setPosition(x, y, z); // le mieux est d'utiliser la fonction onItemUse car il y a les coordonnées du bloc sur lequel on a fait le clic droit
                    world.spawnEntityInWorld(e);
                    
                    1 réponse Dernière réponse Répondre Citer 0
                    • Folgansky
                      Folgansky Correcteurs dernière édition par

                      @‘robin4002’:

                      C’est normal …
                      Ton constructeur n’a que le paramètre world. Donc pas besoin de mettre le player.
                      Et les coordonnées ne sont pas set, donc ça reste sur 0,0,0
                      Il faut utiliser :

                      EntityMoto e = new EntityMoto(world);
                      e.setPosition(x, y, z); // le mieux est d'utiliser la fonction onItemUse car il y a les coordonnées du bloc sur lequel on a fait le clic droit
                      world.spawnEntityInWorld(e);
                      

                      Ouaip donc j’obtiens ça si j’ai bien compris:

                      public class ItemMonture extends Item
                      {
                      public void onItemUse(World world, int x, int y, int z)
                      {
                      EntityMoto e = new EntityMoto(world);
                      e.setPosition(x, y, z); // le mieux est d'utiliser la fonction onItemUse car il y a les coordonnées du bloc sur lequel on a fait le clic droit
                      world.spawnEntityInWorld(e);
                      }
                      }
                      

                      En cliquant rien ne se passe. J’ai raté un truc de base je pense… C’est un event le truc en fait? Y’a qqchose à mettre dans une autre classe?

                      1 réponse Dernière réponse Répondre Citer 0
                      • SCAREX
                        SCAREX dernière édition par

                        Rajoute des logs dans la fonction pour voir si elle est appelée

                        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
                        • robin4002
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                          Tu n’a pas les bons arguments. Cherches la fonction onItemUse dans la classe Item pour trouver les bons arguments. Ou utilise la fonction Override/implements methods d’Eclipse.

                          1 réponse Dernière réponse Répondre Citer 0
                          • Folgansky
                            Folgansky Correcteurs dernière édition par

                            Effectivement la console ne marque rien quand je clique avec l’item en main.

                            Et dans la calsse Item, OnItemUse est un boolean =/

                            1 réponse Dernière réponse Répondre Citer 0
                            • Deleted
                              Deleted dernière édition par

                              Et alors ? Sa ne pose pas problème…Fais juste un return false ou true c’est toi qui voit si tu as des conditions ou pas.

                              1 réponse Dernière réponse Répondre Citer 0
                              • Folgansky
                                Folgansky Correcteurs dernière édition par

                                J’ai fais ça:

                                
                                public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                                    {
                                EntityMoto e = new EntityMoto(world);
                                e.setPosition(x, y, z); // le mieux est d'utiliser la fonction onItemUse car il y a les coordonnées du bloc sur lequel on a fait le clic droit
                                world.spawnEntityInWorld(e);
                                System.out.println("OK");
                                        return true;
                                    }
                                
                                

                                Il faut savoir que je n’ai aucune réelle compréhension du java, je comprends surtout les tutos bien fait comme on en trouve chez MFF 😃

                                Voilà bref, ça me spawn enfin quelque chose:
                                Deux entités, la moto, mais enfoncés dans le sol (faut que je retrouve où régler ça).
                                Dans la console ça marque deux fois de suite le “Ok”

                                Edit: Bon pour la position un simple:

                                e.setPosition(x, y + 1.0F, z);
                                

                                Mais j’ai toujours deux entités qui spawn, une qui ne bougera jamais et je dois recliquer pour pouvoir accèder à la deuxième qui elle fonctionne.
                                Est ce que je dois rajouter un set.Dead ou un truc du genre quelque part?

                                1 réponse Dernière réponse Répondre Citer 0
                                • Deleted
                                  Deleted dernière édition par

                                  Car la méthode spawnEntityInWorld, n’est à appeler que côté server. La méthode équivalente sur le client est vide, c’esst pour cela que tu as une deuxième moto qui ne bouge pas. Alors ton code devrait plutôt être comme ça

                                  
                                  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)
                                  {
                                  EntityMoto e = new EntityMoto(world);
                                  e.setPosition(x, y, z); // le mieux est d'utiliser la fonction onItemUse car il y a les coordonnées du bloc sur lequel on a fait le clic droit
                                  world.spawnEntityInWorld(e);
                                  System.out.println("OK");
                                  }
                                         return true;
                                     }
                                  
                                  

                                  Si la condition world.isRemote est true, cela signifie qu’ont est sur le client, sinon on est sur le serveur 😃

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

                                    Non, côté client la méthode n’est pas vide. S’il était vide il n’y aurai pas de problème. Côté client elle ajoute dans le monde client l’entité et du-coup le rendu va se faire. Mais comme cette entité ne sera pas lié a une entité côté serveur, il y a aura juste un rendu. Pas de collision, pas d’ia, rien. C’est pour ça qu’elle ne bouge pas.

                                    Mais le correctif est bien de mettre if(!world.isRemote).

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Folgansky
                                      Folgansky Correcteurs dernière édition par

                                      D’acc, le spawn se passe bien.

                                      Deux petites questions qui touchent au sujet.

                                      Comment faire que l’item n’ait qu’une seule utilisation et donc soit consommée à l’utilisation?

                                      Est ce que je dois créer une classe “ItemMontureX” par entité à faire spawn ou bien je peux passer via des conditions pour faire spawn 2, 3 ou 4 autres entités différentes via le même item? (si oui, je vois pas comment, sinon j’en suis pas à 4 classes près mais ça allègerait le tout je pense)

                                      Merci pour votre aide en tout cas, c’est plaisant d’avoir des gens pour nous éclairer.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • Deleted
                                        Deleted dernière édition par

                                        Pour qu’il soit consommée :
                                        stack.stackSize–;

                                        Pour te servir que d’un seul item mais qui fera spawn plusieurs entité, il faut lui attribuer des métadatas. Le tuto se trouve sur le fofo, à toi de chercher 😃

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Folgansky
                                          Folgansky Correcteurs dernière édition par

                                          Métadatas, ouki.
                                          J’ai utilisé ça pour des blocs déjà, je ne devrais pas trop galérer (on ne sait jamais).
                                          Je mettrai le sujet en Résolu quand j’aurai réussi.

                                          Merci.

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • RedRelay
                                            RedRelay Moddeurs confirmés dernière édition par

                                            @‘Julot10085’:

                                            Pour qu’il soit consommée :
                                            stack.stackSize–;

                                            Pour te servir que d’un seul item mais qui fera spawn plusieurs entité, il faut lui attribuer des métadatas. Le tuto se trouve sur le fofo, à toi de chercher 😃

                                            Mais lorsque tu vas quitter la 1.7.10, tu vas avoir des problèmes. Il n’y a plus de metadata sur les items a partir de la 1.8

                                            –------------------------------------------------------------------------------------
                                            Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB