• 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

Monture Custom

Sans suite
1.7.10
7
72
14.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 28 oct. 2015, 12:39

    Du grand n’importe quoi x)
    Est-ce que tu as la moindre idée de ce que tu es en train de faire ?
    Tes fonctions hasTagCompound et setTagCompound ne fond absolument rien. Elle ne servent non plus à rien, car comme tu es dans une entité tu as déjà une instance par entité (contrairement au item qui ont une instance unique).
    Donc pas besoin de tag nbt, tu peux simplement ajouter une variable timer dans ton entité.

    1 réponse Dernière réponse Répondre Citer 0
    • BrokenSwing
      BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 28 oct. 2015, 12:45

      Quand tu dis ajout demandé, ça veut dire que eclipse tu demande de créer la fonction ?

      1 réponse Dernière réponse Répondre Citer 0
      • Folgansky
        Folgansky Correcteurs dernière édition par 28 oct. 2015, 13:15

        Eh beh tu vois, c’est en faisant n’importe quoi qu’on … obtient de le merde. (Mais ça pourra être mis dans les fails des faux espoirs)

        Je note pour la variable, juste je peux déclarer ça comment?

        Pour la condition, je dois bien faire comme Julot c’est à dire mettre le timer à 0 de base et qu’ouvrir le GUI fasse +1 (enfin incrémenter) jusqu’à atteindre le maximum voulu pour ensuite être remis à 0. Je me trompe?

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 28 oct. 2015, 13:19

          Déclarer une variable, c’est du java c’est pas compliqué …

          private int timer = 0;
          

          Ensuite dans la fonction onUpdate :

          if(this.timer > 0)
          {
              this.timer --;
          }

          et pour finir dans la fonction où tu joues ton son :

          if(this.timer == 0)
          {
             // fonction pour jouer le son
             this.timer = <insère ici="" le="" nombre="" de="" tick="" que="" tu="" veux="" avant="" pouvoir="" rejouer="" son="">;
          }
          else
          {
             // afficher le message comme quoi il faut attendre la fin du timer
          }

          Franchement il n’y a rien de compliqué là dedans, c’est juste un peu de Java et de la logique.</insère>

          1 réponse Dernière réponse Répondre Citer 0
          • Folgansky
            Folgansky Correcteurs dernière édition par 28 oct. 2015, 13:27

            Merci bien.

            Je demandais surtout le “int”, la logique ce n’est pas le soucis (mais c’est sympa d’avoir pris la peine de tout rédiger).

            1 réponse Dernière réponse Répondre Citer 0
            • Deleted
              Deleted dernière édition par 28 oct. 2015, 13:32

              Du coup t’y arriveras ? Il faut enregistrer les NBT de ton entity de cette manière :

              public void writeEntityToNBT(NBTTagCompound compound)
              {
              super.writeEntityToNBT(compound);
              compound.setInteger("timer", this.timer);
              }
              public void readEntityFromNBT(NBTTagCompound compound)
              {
              super.readEntityFromNBT(compound);
              compound.getInteger("timer");
              }
              1 réponse Dernière réponse Répondre Citer 0
              • Folgansky
                Folgansky Correcteurs dernière édition par 28 oct. 2015, 14:57

                Oui, “tout” fonctionne.

                Je n’ai pas mis de message pendant le cooldown, ça m’a évité un obstacle au passage.

                Je vous remercie les gars.
                A la prochaine.

                1 réponse Dernière réponse Répondre Citer 0
                • Folgansky
                  Folgansky Correcteurs dernière édition par 5 nov. 2015, 18:10

                  Bien le bonsoir, bien le bonjour,

                  Je reviens ce soir pour explorer une nouvelle nécessité des montures custom: les récupérer.

                  Grâce à votre aide j’ai un item par monture me permettant de poser chaque monture différente suivant un metadata de l’item.

                  Ce qu’il faudrait que je fasse c’est un item qui en cliquant sur une monture la tue, give l’item qui permet de faire spawn la monture et puis consomme l’item.

                  J’aurai donc besoin de votre aide concernant la façon de détecter l’entité sur laquelle on clique et la manière de give un item du mod à un joueur.

                  Je vous joins la classe des :::

                  public class ItemMonture extends Item
                  {
                  public static String[] type = new String[]{"ItemMonture1", "ItemMonture2", "ItemMonture3", "ItemMonture4", "ItemMonture5", "ItemMonture6", "ItemMonture7", "ItemMonture8", "ItemMonture9", "ItemMonture10", "ItemMonture11", "ItemMonture12", "ItemMonture13", "ItemMonture14", "Recycleur"};
                  public IIcon[] iconArray = new IIcon[type.length];
                  public ItemMonture()
                  {
                  super();
                  this.setHasSubtypes(true); 
                  }
                  public int getMaxItemUseDuration(ItemStack stack)
                     {
                         return 1;
                     }
                  @Override
                  public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                  {
                  int metadata = stack.getItemDamage();
                  if(metadata == 0)
                  {
                  EntityMoto e = new EntityMoto(world);
                    if(!world.isRemote)
                        {
                     e.setPosition(x, y + 1.0F, z);
                     world.spawnEntityInWorld(e);
                     stack.stackSize–;
                     DataWatcher dw = e.getDataWatcher();
                     dw.updateObject(30, "Moto");
                        }
                        return true;
                  }
                  else if(metadata == 1)
                  {
                  EntityMoto e = new EntityMoto(world);
                    if(!world.isRemote)
                        {
                     e.setPosition(x, y + 1.0F, z);
                     world.spawnEntityInWorld(e);
                     stack.stackSize--;
                     DataWatcher dw = e.getDataWatcher();
                     dw.updateObject(30, "Moto1");
                        }
                        return true;
                  }
                  else if(metadata == 2)
                  {
                  EntityMoto e = new EntityMoto(world);
                    if(!world.isRemote)
                        {
                     e.setPosition(x, y + 1.0F, z);
                     world.spawnEntityInWorld(e);
                     stack.stackSize--;
                     DataWatcher dw = e.getDataWatcher();
                     dw.updateObject(30, "Moto2");
                        }
                        return true;
                  }
                  else if (metadata == 3)
                      {
                      EntityBMX e = new EntityBMX(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "BMX");
                          }
                              return true;
                      }
                  else if (metadata == 4)
                      {
                      EntityBMX e = new EntityBMX(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "BMX1");
                          }
                              return true;
                      }
                  else if (metadata == 5)
                      {
                      EntityBMX e = new EntityBMX(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "BMX2");
                          }
                              return true;
                      }
                  else if (metadata == 6)
                      {
                      EntityBuggy e = new EntityBuggy(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Buggy");
                          }
                              return true;
                      }
                  else if (metadata == 7)
                      {
                      EntityBuggy e = new EntityBuggy(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Buggy1");
                          }
                              return true;
                      }
                  else if (metadata == 8)
                      {
                      EntityBuggy e = new EntityBuggy(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Buggy2");
                          }
                              return true;
                      }
                      else if (metadata == 9)
                      {
                      EntityBaignoire e = new EntityBaignoire(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Baignoire");
                          }
                              return true;
                      }
                      else if (metadata == 10)
                      {
                      EntityKart e = new EntityKart(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Kart");
                          }
                              return true;
                      }
                      else if (metadata == 11)
                      {
                      EntityKart e = new EntityKart(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Kart1");
                          }
                              return true;
                      }
                      else if (metadata == 12)
                      {
                      EntityKart e = new EntityKart(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Kart2");
                          }
                              return true;
                      }
                      else if (metadata == 13)
                      {
                      EntityBolide e = new EntityBolide(world);
                      if(!world.isRemote)
                          {
                      e.setPosition(x, y + 1.0F, z);
                      world.spawnEntityInWorld(e);
                      stack.stackSize--;
                      DataWatcher dw = e.getDataWatcher();
                      dw.updateObject(30, "Bolide");
                          }
                              return true;
                      }
                      else if (metadata == 14)
                      {
                      }
                  return false;
                  }
                      public int getMetadata(int metadata)
                  {
                  return metadata;
                  }
                      public String getUnlocalizedName(ItemStack stack)
                      {
                          int metadata = stack.getItemDamage();
                          if(metadata > type.length || metadata < 0)
                          {
                          metadata = 0;
                          }
                          return super.getUnlocalizedName() + "." + type[metadata];
                      }
                  @SuppressWarnings({ "rawtypes", "unchecked" })
                  public void getSubItems(Item item, CreativeTabs tabs, List list)
                      {
                      for(int i = 0; i < type.length; i++)
                      {
                          list.add(new ItemStack(item, 1, i));
                      }
                      }
                      public void registerIcons(IIconRegister iconRegister)
                      {
                      for(int i = 0; i < type.length; i++)
                          this.iconArray* = iconRegister.registerIcon(Modpg.MODID + ":" + type*);
                      }
                      public IIcon getIcon(int side, int metadata)
                      {
                      if(metadata >= 0 && metadata < type.length)
                      {
                      return this.iconArray[metadata];
                      }
                          return this.iconArray[0];
                      }
                      public IIcon getIconFromDamage(int metadata)
                  {
                  return metadata < type.length && metadata >= 0 ? iconArray[metadata] : iconArray[0];
                  }
                  }

                  :::

                  Du coup j’aimerais utiliser un item de metadata 14 pour faire le “recycleur”.

                  :::

                  else if (metadata == 14)
                      {
                      //if (La monture sur laquelle je clique est un Kart de type Kart2 && (La monture sur laquelle je clique).riddenByEntity == null)
                      //{
                      //    (La monture sur laquelle je clique).setDead;
                      //    give l'itemMonture de metadata 12;
                      //    stack.stackSize–;
                      //}
                      //if (La monture sur laquelle je clique est une moto de type moto1 && (La monture sur laquelle je clique).riddenByEntity == null)
                      //{
                      //    (La monture sur laquelle je clique).setDead;
                      //    give l'itemMonture de metadata 1;
                      //    stack.stackSize--;
                      //}
                      //   return true,
                      }

                  :::

                  Voilà où j’en suis rendu =')

                  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. 2015, 19:34

                    La fonction onItemUse n’est que appelé quand tu fais un clic droit sur un bloc.
                    Donc il va falloir passer par onRightClick + un player.rayTrace (qui n’est que côté client donc paquet). La fonction rayTrace te renvoies un MovingObjectPosition et avec lui tu peux savoir s’il y a une entité ou pas et obtenir son instance. Un petit if(mop.hitEntity instanceof TonEntity) et c’est bon.

                    EDIT : d’après ce post : http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/modification-development/2426102-alternatives-to-player-raytrace?comment=6 il existe autre chose que player.rayTrace pour avoir un MovingObjectPosition.

                    1 réponse Dernière réponse Répondre Citer 0
                    • Folgansky
                      Folgansky Correcteurs dernière édition par 5 nov. 2015, 20:25

                      Ok, alors chui loin du compte.

                      De ce que j’ai pu comprendre et voir j’ai ça:

                      :::

                          public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
                          {
                          int metadata = stack.getItemDamage();
                          Vec3 look = player.getLookVec();
                          float f = 200.0F;
                          Vec3 start = new Vec3(player.posX, player.posY + player.getEyeHeight(), player.posZ);
                          Vec3 end = new Vec3(player.posX + look.xCoord * f, player.posY + player.getEyeHeight() + look.yCoord * f, player.posZ + look.zCoord * f);
                          MovingObjectPosition mop = world.rayTraceBlocks(start, end);
                          if(metadata == 14)
                          {
                          if(mop.entityHit instanceof EntityBolide && mop.entityHit.riddenByEntity == null)
                      {
                          {
                      //        mop.entityHit.setDead();
                      //        give l'itemMonture de metadata 1;
                             stack.stackSize–;
                          }
                      }
                              return stack;
                          }
                          }

                      :::

                      En fait j’ai juste trouvé que c’était entityHit et pas hitEntity…

                      J’ai une erreur sur les vecteurs (truc auquel je ne comprends pas tant que ça), ça me marque comme quoi le constructeur Vec3(double, double, double) n’est pas visible.

                      Edit: Après ne serait-il pas plus simple de checker si il n’y a pas une entité à 2/3 blocs du joueur qui serait une entité récupérable?

                      L’histoire de côté client ou serveur avec les paquets ou non me découragent un peu ^^’

                      1 réponse Dernière réponse Répondre Citer 0
                      • Folgansky
                        Folgansky Correcteurs dernière édition par 7 nov. 2015, 03:05

                        Bon comme je ne sais pas trop quoi faire pour récupérer un “mop” j’ai un peu trifouillé ce qui y touchait et je suis tombé sur une archive parlant des potions dont la méthode
                        onImpact récupère un mop.

                        Celui là, c’est par-ici, Il est frais mon poisson.

                        Bref, passons l’heure,

                        L’idée serait d’utiliser une potion à impact qui, si elle touche mon entité précise, fait ce que je lui demande (c’est à dire buter l’entité et récupérer un certain item qui en fait sert à la refaire spawn, même si techniquement c’est une toute autre entité).

                        Est-ce concevable selon vous ce type de potion dans mon cas?

                        1 réponse Dernière réponse Répondre Citer 0
                        • BrokenSwing
                          BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 7 nov. 2015, 09:41

                          Pour ce qui est du fait que le constructeur Vec3 qui n’existe pas, il suffit de faire un CTRL+CLIC sur Vec3 pour entrer dans la classe et voir qu’il faut utiliser

                          Vec3.createVectorHelper(double, double, double);
                          

                          Ce qui retourne une instance de Vec3.

                          Ce que te propose c’est ça :

                          public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity)
                          {
                          if (entity instanceof EntityCreeper)
                          {
                          entity.setDead();
                          –stack.stackSize;
                          player.inventory.addItemStackToInventory(new ItemStack(Items.baked_potato));
                          return true;
                          }
                          else
                          {
                          return false;
                          }
                          }
                          1 réponse Dernière réponse Répondre Citer 2
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 7 nov. 2015, 11:48

                            Je ne savais même pas que la méthode itemInteractionForEntity existait o_O

                            1 réponse Dernière réponse Répondre Citer 0
                            • BrokenSwing
                              BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 7 nov. 2015, 11:55

                              Moi non plus, j’ai regardé la classe de la selle

                              1 réponse Dernière réponse Répondre Citer 0
                              • Folgansky
                                Folgansky Correcteurs dernière édition par 7 nov. 2015, 12:50

                                Edit: Cette méthode tombe vraiment à pic. Merci Bodri pour ton intuition sur la selle.

                                Alors j’arrive à récupérer l’item voulu en fonction de l’entité sur laquelle je clique. Le problème est que ça consomme deux fois l’item et me donne deux fois l’autre item ^^’

                                Par contre si je clique sur une autre entité avec cette item je crash, où dois-je mettre le nullcheck svp?

                                :::

                                public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity)
                                    {
                                int metadata = stack.getItemDamage();
                                if (metadata == 14)
                                {
                                DataWatcher dw = entity.getDataWatcher();
                                       if (dw.getWatchableObjectString(30) == "Moto" && entity instanceof EntityMoto)
                                       {
                                           entity.setDead();
                                           –stack.stackSize;
                                           player.inventory.addItemStackToInventory(new ItemStack(Modpg.itemMonture, 1, 0));
                                           return true;
                                       }
                                       else if (dw.getWatchableObjectString(30) == "Kart2" && entity instanceof EntityKart)
                                       {
                                           entity.setDead();
                                           --stack.stackSize;
                                           player.inventory.addItemStackToInventory(new ItemStack(Modpg.itemMonture, 1, 12));
                                           return true;
                                       }
                                       else if (entity instanceof EntityBolide)
                                       {
                                           entity.setDead();
                                           --stack.stackSize;
                                           player.inventory.addItemStackToInventory(new ItemStack(Modpg.itemMonture, 1, 13));
                                           return true;
                                       }
                                }
                                   else    
                                   return false;    
                                }
                                return false;
                                    }

                                :::

                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 7 nov. 2015, 18:35

                                  Envoies le rapport de crash.
                                  Et pour l’action fait en double il faut ajouter if(!world.isRemote)

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Folgansky
                                    Folgansky Correcteurs dernière édition par 7 nov. 2015, 19:07

                                    En faisant:

                                    :::

                                    public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity, World world)
                                        {
                                    int metadata = stack.getItemDamage();
                                    if (metadata == 14 && !world.isRemote)
                                    {[…]}

                                    :::

                                    Les items ne remplissent plus leur fonction mais font toujours crash quand je clique sur un animal (autre entité que mes véhicules).

                                    Et le rapport de crash (quand je ne met pas le isRemote):  Pastebin

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • robin4002
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 7 nov. 2015, 19:27

                                      La condition “entity instanceof EntityMoto” doit être avant “dw.getWatchableObjectString(30) == “Moto””

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • Folgansky
                                        Folgansky Correcteurs dernière édition par 7 nov. 2015, 19:36

                                        C’était bien ça.

                                        Par contre toujours le même problème de “double action” exécutée côté client +serveur je suppose mais le !world.isRemote que je rajoute rend obselète la méthode: l’item ne fonctionne plus quoi.

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • robin4002
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 7 nov. 2015, 19:41

                                          Pourtant il n’y a pas de raison pour que ça bloque. Étrange.

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

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB