MFF

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

    Monture Custom

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    72 Messages 7 Publieurs 16.3k 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.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      Bon visiblement si je mets comme condition que le joueur doit être en train de sneak c’est bon. 
      Reste le test serveur mais ça devrait être ça 😃

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

        Salut, je reviens sur les montures avec un point de détail qui reste quand même quelque chose de visuellement très frappant.
        Pour que mes montures ne bougent plus quand on n’est pas dessus j’ai fais ça:

        :::

        else if (this.riddenByEntity == null)
            {
            motionX = motionY = motionZ = 0.0F;
            }
        

        :::

        Ce qu’il fait que si je quitte le véhicule en l’air, celui-ci reste figé dans les airs, comme si de rien était.
        Je vois mal la condition qu’il me faut pour, qu’une fois dépourvu de rider, la monture retombe au sol avant de rester immobile.

        Je souligne le fait que mes véhicules ont le code du cheval et le onUpdate qui va avec donc.

        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

            else if (this.riddenByEntity == null)
             {
                 motionX = motionZ = 0.0F;
             }
          

          Voila, suffit de faire comme ça.

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

            J’ai bien déjà “tenté” ça et la monture reste tout de même figée en l’air.

            Edit:

            Ce soucis est réglé, il faut croire que bidouiller le code du cheval c’est pas top.
            :::

            public void onUpdate()
                {
            super.onUpdate();
            if (this.riddenByEntity == null)
                {
            motionX = motionZ = 0.0F;
                this.rotationYaw = this.prevRotationYaw;
                }
                }
            

            :::

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

              Me revoici également sur les montures et ce concernant la privatisation de l’entité.

              De ce que j’ai pu obtenir comme info, je dois faire via datawatcher et nbt, comme il en avait été question pour les textures.

              Actuellement j’ai ces méthodes:

              :::

              public boolean interact(EntityPlayer player)
                {
                    String str = this.getTagCompound().getString("<id>");
              
                if (player.inventory.getCurrentItem() == null && this.riddenByEntity == null && str.equals ("<id>"))
                    {
                        this.moteur = 200;
                    worldObj.playSoundAtEntity(this, "modpg:moteur", 1.0F, 1.0F);
                    player.mountEntity(this);
                    return true;       
                    }
                    return false;       
                }
              
              public void writeEntityToNBT(NBTTagCompound nbt) {
              super.writeEntityToNBT(nbt);
              DataWatcher dw = this.getDataWatcher();
              nbt.setString("EntityBaignoireTexture", dw.getWatchableObjectString(30));
              nbt.setInteger("timer", this.timer);
              nbt.setString("<id>", dw.getWatchableObjectString(31));
              }
              
              public void readEntityFromNBT(NBTTagCompound nbt) {
              super.readEntityFromNBT(nbt);
              DataWatcher dw = this.getDataWatcher();
              dw.updateObject(30, nbt.getString("EntityBaignoireTexture"));
              dw.updateObject(31, nbt.getString("<id>"));
              nbt.getInteger("timer");
              }
              

              :::

              Et dans une classe j’ai la méthode handleConstruction pour faire:
              :::

               else if(event.entity instanceof EntityBaignoire)
                {
                    DataWatcher dw = event.entity.getDataWatcher();
                    dw.addObject(30, "PG Baignoire");
                    dw.addObject(31, "<id>");
                }
              

              :::

              Mon principal soucis est de récupérer mon nbt dans l’entité car:

              String str = this.getTagCompound().getString("<id>");
              

              Me fait une erreur sur le “.getTagCompound()” (tout naturellement m’as-t-on dis)

              Je m’en remet à vous à ce sujet.</id></id></id></id></id></id>

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

                EUh, là tu utilises les dataWatcher les nbt en même temps ? Or dataWatcher != nbt

                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
                • FolganskyF Hors-ligne
                  Folgansky Correcteurs
                  dernière édition par

                  Bah je calque la façon selon laquelle j’ai dû utiliser les deux (datawatcher et nbt) afin d’appliquer la texture à mon entité (car il y a plusieurs textures pour un même modèle, sujet traité plus en amont dans ce topic).

                  Le résultat espéré c’est que lorsqu’un joueur fait spawn l’entité (avec un item en l’occurrence), l’UUID de ce joueur est stocké grâce au datawatcher +nbt (le fonctionnement de ces outils me dépasse actuellement).

                  Au final, lorsqu’un joueur tentera d’interagir avec l’entité, celle-ci checke si l’id du joueur qui clique est la même que celle enregistrée.

                  <id>permet bien de récupérer l’id du joueur nan?</id>

                  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

                    Pour recup la valeur dans l’entité il faut utiliser le data watcher.

                    Non, l’uuid du joueur c’est player.getGameProfile().getID()

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

                      D’acc. Du coup j’ai ça pour la condition (qui semble ok):

                      String str = this.getDataWatcher().getWatchableObjectString(31);
                      

                      Par contre je ne comprends pas comment enregistrer l’id du joueur qui créé l’entité.

                      Ce que tu m’as passé robin ça donne:

                      UUID uuid = player.getGameProfile().getId();
                      

                      A quel endroit je peux me servir de ce “uuid” par rapport aux datawatcher et mes nbt?

                      Ce n’est pas obligatoirement un string?

                      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

                        Lors de la création de l’entité, donc dans le constructeur.
                        Pour avoir un string utilises player.getGameProfile().getId().toString()

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

                          Ouki!
                          On m’a donné un p’tit coup de pouce sur le ts hier soir.
                          Qui m’a permis effectivement de passer de l’uuid à un string récupérable.

                          Merci les gars, le topic sur les montures custom commence à être bien étoffé.

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

                            Bonjour/Bonsoir,

                            Je relance ce topic sur les montures pour vous demander un coup de main concernant une fonctionnalité bien utile pour un véhicule:
                            -Pouvoir voyager à plusieurs.

                            Je pense faire une pirouette et ne pas faire une entité qui suivra mon véhicule.
                            Le joueur doit être dans un véhicule et appuyer sur une touche pour faire spawn une entité qui le suit lui, mais seulement tant qu’il est dans un véhicule. Du coup un second joueur pourra cliquer dessus et s’asseoir dessus et suivra les déplacements du joueur+véhicule.

                            Ou alors, question: Peut-on faire monter deux joueurs sur le cheval de Minecraft? Si oui, je pourrais me débrouiller pour faire s’asseoir le second gars un peu à côté.

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

                              Je ne pense pas que ce soit trop possible, les deux joueurs risquent de se superposer. Il faudrait que tu réecrives la méthode pour monter une entity 😕

                              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

                                @‘Toutoune1008’:

                                Ou alors, question: Peut-on faire monter deux joueurs sur le cheval de Minecraft? Si oui, je pourrais me débrouiller pour faire s’asseoir le second gars un peu à côté.

                                Non. Mais sur ta propre entité ça devrait être possible. Il faudrait reprendre tout le code en rapport avec mountEntity et faire une version avec un tableau + des boucles.

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

                                  Sauf que ma propre entité est extends EntityHorse malheureusement ^^

                                  Du coup je reviens sur ma première proposition. Actuellement donc j’ai simplement les méthodes pour ajouter une touche personnalisée.

                                      @SubscribeEvent
                                      public void onEvent(KeyInputEvent event)
                                      {
                                          if(ModPg2.keyBindPassager.isPressed())
                                          {
                                              keyPassagerTyped();
                                          }
                                      }
                                  
                                      private void keyPassagerTyped()
                                      {
                                           if (Minecraft.getMinecraft().thePlayer.ridingEntity != null)
                                           {
                                               // Je fais spawn mon entité qui suivra le joueur
                                  
                                           if (Minecraft.getMinecraft().thePlayer.ridingEntity != null)
                                           {
                                               // Je fais spawn mon entité qui suivra le joueur
                                                EntitySittable e = new EntitySittable(Minecraft.getMinecraft().thePlayer.worldObj);
                                                 if(!Minecraft.getMinecraft().thePlayer.worldObj.isRemote)
                                                 {
                                                     e.setPosition(Minecraft.getMinecraft().thePlayer.posX + 0.5F, Minecraft.getMinecraft().thePlayer.posY, Minecraft.getMinecraft().thePlayer.posZ);
                                                     Minecraft.getMinecraft().thePlayer.worldObj.spawnEntityInWorld(e);
                                                 }
                                           }
                                  
                                           }
                                          Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText("Ok pour la touche"));
                                      }
                                  

                                  et la classe de mon entité qui devra suivre le joueur

                                  package fr.powergame.modpg2.common;
                                  
                                  import net.minecraft.entity.Entity;
                                  import net.minecraft.entity.player.EntityPlayer;
                                  import net.minecraft.nbt.NBTTagCompound;
                                  import net.minecraft.world.World;
                                  
                                  public class EntitySittable extends Entity
                                  {
                                      public int entityPosX;
                                      public int entityPosY;
                                      public int entityPosZ;
                                  
                                      public EntitySittable(World world)
                                      {
                                          super(world);
                                          this.preventEntitySpawning = true;
                                          this.setSize(0.5F, 0.5F);
                                      }
                                  
                                      public EntitySittable(World world, EntityPlayer entityplayer, int x, int y, int z, float entityX, float entityY, float entityZ)
                                      {
                                          this(world);
                                          this.entityPosX = x;
                                          this.entityPosY = y;
                                          this.entityPosZ = z;
                                          this.setPosition(entityX, entityY, entityZ);
                                      }
                                  
                                      public boolean interact(EntityPlayer entityplayer)
                                      {
                                          if(this.riddenByEntity != null)
                                          {
                                              return true;
                                          }
                                  
                                          if(!this.worldObj.isRemote)
                                          {
                                              entityplayer.mountEntity(this);
                                          }
                                          return true;
                                      }
                                  
                                      @Override
                                      public void onEntityUpdate()
                                      {
                                          if(this.riddenByEntity == null || this.riddenByEntity.isDead)
                                          {
                                              this.setDead();
                                          }
                                          super.onEntityUpdate();
                                      }    
                                  
                                      @Override
                                      public void writeEntityToNBT(NBTTagCompound nbt)
                                      {
                                          nbt.setInteger("entityPosX", this.entityPosX);
                                          nbt.setInteger("entityPosY", this.entityPosY);
                                          nbt.setInteger("entityPosZ", this.entityPosZ);
                                      }
                                  
                                      @Override
                                      public void readEntityFromNBT(NBTTagCompound nbt)
                                      {
                                          this.entityPosX = nbt.getInteger("entityPosX");
                                          this.entityPosY = nbt.getInteger("entityPosY");
                                          this.entityPosZ = nbt.getInteger("entityPosZ");
                                      }
                                  
                                      @Override
                                      protected void entityInit()
                                      {
                                  
                                      }
                                  }
                                  

                                  A la base cette entité sert pour s’asseoir sur un bloc, j’ai juste renommé les Posx/y/z en attendant.

                                  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 vois.
                                    Ça peut aussi fonctionner, mais tu peux très bien faire ce que j’ai dit avant. La classe est à toi, tu peux faire ce que tu veux avec, le fait qu’elle soit extends EntityHorse ne dérange pas.

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

                                      Cette méthode de la classe Entity?

                                       /**
                                           * Called when a player mounts an entity. e.g. mounts a pig, mounts a boat.
                                           */
                                          public void mountEntity(Entity p_70078_1_)
                                          {
                                              this.entityRiderPitchDelta = 0.0D;
                                              this.entityRiderYawDelta = 0.0D;
                                      
                                              if (p_70078_1_ == null)
                                              {
                                                  if (this.ridingEntity != null)
                                                  {
                                                      this.setLocationAndAngles(this.ridingEntity.posX, this.ridingEntity.boundingBox.minY + (double)this.ridingEntity.height, this.ridingEntity.posZ, this.rotationYaw, this.rotationPitch);
                                                      this.ridingEntity.riddenByEntity = null;
                                                  }
                                      
                                                  this.ridingEntity = null;
                                              }
                                              else
                                              {
                                                  if (this.ridingEntity != null)
                                                  {
                                                      this.ridingEntity.riddenByEntity = null;
                                                  }
                                      
                                                  if (p_70078_1_ != null)
                                                  {
                                                      for (Entity entity1 = p_70078_1_.ridingEntity; entity1 != null; entity1 = entity1.ridingEntity)
                                                      {
                                                          if (entity1 == this)
                                                          {
                                                              return;
                                                          }
                                                      }
                                                  }
                                      
                                                  this.ridingEntity = p_70078_1_;
                                                  p_70078_1_.riddenByEntity = this;
                                              }
                                          }
                                      
                                      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 modifier tout ce qui est en rapport avec ridingEntity

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

                                          J’ai un peu de mal avec l’approche nécessaire.

                                          ridingEntity correspond à l’entité que l’on est en train de monter, ici un véhicule. (C.f "The entity we are currently riding ")
                                          riddenByEntity correspond à une entité qui est en train d’en monter une autre, ici le joueur. (C.f "The entity that is riding this entity ")

                                          Du coup moi je me mélange tout. Car ridingEntity semble être le joueur.

                                          Du coup si je veux ajouter un passager sur mon entité, je dois pouvoir enregistrer 2 "ridingEntity " dessus.
                                          Pourquoi devoir modifier toutes les fois où ridingEntity apparaît du coup?

                                          Je préfèrerais détecter si mon entité est actuellement toujours montée par un joueur et si oui pouvoir monter dessus mais à une place différente.

                                          En tout cas, voilà ce que je comprend des méthodes qui me semblent concernées (si j’en oublie ça viendra)

                                          public void updateRidden() //ce qu'il se passe du côté de véhicule
                                              {
                                                  if (this.ridingEntity.isDead)  //si le joueur est mort
                                                  {
                                                      this.ridingEntity = null;   //Le joueur ne la monte plus
                                                  }
                                                  else    //qu'il y ait ou pas un joueur bien vivant sur le véhicule
                                                  {
                                                      this.motionX = 0.0D;       //
                                                      this.motionY = 0.0D;       //  Mouvements bloqués
                                                      this.motionZ = 0.0D;       //
                                                      this.onUpdate();
                                          
                                                      if (this.ridingEntity != null)   //si il y a un joueur/entité sur le véhicule
                                                      {
                                                          this.ridingEntity.updateRiderPosition();   //On définit sa position sur le véhicule
                                                          this.entityRiderYawDelta += (double)(this.ridingEntity.rotationYaw - this.ridingEntity.prevRotationYaw);  //La hauteur des yeux du joueur je suppose
                                          
                                          // la suite j'en ai aucune idée, des trucs concernant là où le joueur regarde peut-être, sûrement pour conserver de bonnes valeurs… enfin bon tant Pi
                                                          for (this.entityRiderPitchDelta += (double)(this.ridingEntity.rotationPitch - this.ridingEntity.prevRotationPitch); this.entityRiderYawDelta >= 180.0D; this.entityRiderYawDelta -= 360.0D)
                                                          {
                                                              ;
                                                          }
                                          
                                                          while (this.entityRiderYawDelta < -180.0D)
                                                          {
                                                              this.entityRiderYawDelta += 360.0D;
                                                          }
                                          
                                                          while (this.entityRiderPitchDelta >= 180.0D)
                                                          {
                                                              this.entityRiderPitchDelta -= 360.0D;
                                                          }
                                          
                                                          while (this.entityRiderPitchDelta < -180.0D)
                                                          {
                                                              this.entityRiderPitchDelta += 360.0D;
                                                          }
                                          
                                                          double d0 = this.entityRiderYawDelta * 0.5D;
                                                          double d1 = this.entityRiderPitchDelta * 0.5D;
                                                          float f = 10.0F;
                                          
                                                          if (d0 > (double)f)
                                                          {
                                                              d0 = (double)f;
                                                          }
                                          
                                                          if (d0 < (double)(-f))
                                                          {
                                                              d0 = (double)(-f);
                                                          }
                                          
                                                          if (d1 > (double)f)
                                                          {
                                                              d1 = (double)f;
                                                          }
                                          
                                                          if (d1 < (double)(-f))
                                                          {
                                                              d1 = (double)(-f);
                                                          }
                                          
                                                          this.entityRiderYawDelta -= d0;
                                                          this.entityRiderPitchDelta -= d1;
                                                      }
                                                  }
                                              }
                                          
                                              public void updateRiderPosition()  //position du joueur par rapport au véhicule. Toucher au Y est simple, mais le X et Z... là je vois mal.
                                              {
                                                  if (this.riddenByEntity != null)
                                                  {
                                                      this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ);
                                                  }
                                              }
                                          
                                              public void mountEntity(Entity ent)   //quand une entité monte sur un véhicule
                                              {
                                                  this.entityRiderPitchDelta = 0.0D;   //on soude les visions des deux entités je suppose
                                                  this.entityRiderYawDelta = 0.0D;
                                          
                                                  if (ent == null)        //si l'entité qui monte le véhicule est null
                                                  {
                                                      if (this.ridingEntity != null)  //si le véhicule est sensé être en train d'être monté
                                                      {
                                                          this.setLocationAndAngles(this.ridingEntity.posX, this.ridingEntity.boundingBox.minY + (double)this.ridingEntity.height, this.ridingEntity.posZ, this.rotationYaw, this.rotationPitch);   // On fait je sais pas quoi mais ça a l'air important
                                                          this.ridingEntity.riddenByEntity = null;  //on définit que l'entité qui montait le véhicule est maintenant null
                                                      }
                                          
                                                      this.ridingEntity = null;  //le véhicule n'est plus monté
                                                  }
                                                  else    // si il y a une entité sur le véhicule
                                                  {
                                                      if (this.ridingEntity != null)  // si le véhicule est déjà monté
                                                      {
                                                          this.ridingEntity.riddenByEntity = null; //problème de lecture du java, là je ne vois pas quelle entité devient null. On empêche de monter sur le véhicule je suppose
                                                      }
                                          
                                                      if (ent != null)  //Si il y a bien une entité sur le véhicule
                                                      {
                                                          for (Entity entity1 = ent.ridingEntity; entity1 != null; entity1 = entity1.ridingEntity) //euh... On check les entités sur le véhicule?
                                                          {
                                                              if (entity1 == this)
                                                              {
                                                                  return;
                                                              }
                                                          }
                                                      }
                                          
                                                      this.ridingEntity = ent; //on définit l'entité comme celle qui est montée sur le véhicule
                                                      ent.riddenByEntity = this; //on définit le véhicule montée par l'entité comme étant le véhicule en question...
                                                  }
                                              }
                                          

                                          Bref, je n’ai pas tout compris et je pense me tromper surtout sur pas mal de choses.

                                          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

                                            C’est bien riddenByEntity qui correspond au joueur qui monte l’entité.

                                            Ce qu’il faut faire c’est faire une liste d’entité riddenByEntityList par exemple et override toutes les fonctions en rapport avec riddenByEntity et remplacer riddenByEntity par cette liste.

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB