MFF

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

    Faire une entité montable : le packet

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.x
    3 Messages 2 Publieurs 845 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.
    • AxaurusA Hors-ligne
      Axaurus
      dernière édition par

      Salut
      L’année dernière, j’ai créer un renne. Cette année, j’ai voulu faire en sorte qu’on puisse monter dessus et bouger avec (un peu comme un cheval (j’aurai aussi voulu qu’il puisse voler si on pointe la souris en l’air, mais je verrais ça plus tard)).
      J’ai pris longtemps, mais j’ai réussi.

      Seul problème : quand on bouge, il revient à sa position d’origine quelques secondes plus tard. Si j’ai bien compris, c’est parce que le server “ne sait pas” qu’il bouge, et qu’il faut utiliser un packet. J’ai donc suivi le tuto pour ajouter des packets, mais je ne sais pas comment les exploiter pour mon cas (récupérer la position du renne ?).

      Voilà mes classes :
      Dans la classe principale :

      public static SimpleNetworkWrapper network;
      

      Dans la classe principale (dans la fonction pré init) :

      network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);
      network.registerMessage(NetworkMessageHandler.class, NetworkMessage.class, 0, Side.SERVER);
      

      NetworkMessageHandler :

      package This_is_Christmas;
      
      import cpw.mods.fml.common.network.simpleimpl.IMessage;
      import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
      import cpw.mods.fml.common.network.simpleimpl.MessageContext;
      
      public class NetworkMessageHandler implements IMessageHandler<networkmessage, imessage="">{
      
      @Override
      public IMessage onMessage(NetworkMessage message, MessageContext ctx)
      {
      System.out.println(message.ReindeerRiding);
      // What packet will doing ?
      
      return null;
      }
      
      }
      
      

      NetworkMessage :

      package This_is_Christmas;
      
      import cpw.mods.fml.common.network.ByteBufUtils;
      import cpw.mods.fml.common.network.simpleimpl.IMessage;
      import io.netty.buffer.ByteBuf;
      
      public class NetworkMessage implements IMessage{
      
      public String ReindeerRiding;
      
      public NetworkMessage()
      {
      
         }
      
      public NetworkMessage(String string)
      {
      ReindeerRiding = string;
         }
      
      @Override
      public void fromBytes(ByteBuf buf)
      {
      ReindeerRiding = ByteBufUtils.readUTF8String(buf);
      }
      
      @Override
      public void toBytes(ByteBuf buf)
      {
      ByteBufUtils.writeUTF8String(buf, ReindeerRiding);
      }
      
      }
      
      

      De plus, j’ai mis ```java
      This_is_Christmas.This_is_Christmas.network.sendToServer(new NetworkMessage(networkmessage.ReindeerRiding));

      
      Voilà, si vous savez comment faire, …
      
      Merci d'avance</networkmessage,>
      1 réponse Dernière réponse Répondre Citer 0
      • SCAREXS Hors-ligne
        SCAREX
        dernière édition par

        Regarde la classe du cheval car normalement ça se fait automatiquement

        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
        • AxaurusA Hors-ligne
          Axaurus
          dernière édition par

          Salut
          J’ai cherché dans la classe du cheval et je n’ai rien trouvé. J’ai aussi regarder dans la classe du cochon, rien non plus.
          J’ai encore recherché sur Internet et j’ai trouvé : apparamment, je n’utilisais pas le bon code. Voilà celui que j’ai trouvé qui marche :

          public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_)
          {
             if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase)
             {
                 this.prevRotationYaw = this.rotationYaw = this.riddenByEntity.rotationYaw;
                 this.rotationPitch = this.riddenByEntity.rotationPitch * 0.5F;
                 this.setRotation(this.rotationYaw, this.rotationPitch);
                 this.rotationYawHead = this.renderYawOffset = this.rotationYaw;
                 p_70612_1_ = ((EntityLivingBase)this.riddenByEntity).moveStrafing * 0.5F;
                 p_70612_2_ = ((EntityLivingBase)this.riddenByEntity).moveForward;
          
                 if (p_70612_2_ <= 0.0F)
                 {
                     p_70612_2_ *= 0.25F;
                 }
          
                 this.stepHeight = 1.0F;
                 this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F;
          
                 if (!this.worldObj.isRemote)
                 {
                     this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue());
                     super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
                 }
          
                 this.prevLimbSwingAmount = this.limbSwingAmount;
                 double d1 = this.posX - this.prevPosX;
                 double d0 = this.posZ - this.prevPosZ;
                 float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F;
          
                 if (f4 > 1.0F)
                 {
                     f4 = 1.0F;
                 }
          
                 this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F;
                 this.limbSwing += this.limbSwingAmount;
             }
             else
             {
                 this.stepHeight = 0.5F;
                 this.jumpMovementFactor = 0.02F;
                 super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
             }
          }
          

          Maintenant, quand je bouge avec le renne, il est “synchro” et ne rollback plus.

          Merci 😉

          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