• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Faire une entité montable : le packet

    1.7.x
    1.7.x
    2
    3
    708
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Axaurus
      Axaurus last edited by

      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 Reply Last reply Reply Quote 0
      • SCAREX
        SCAREX last edited by

        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 Reply Last reply Reply Quote 0
        • Axaurus
          Axaurus last edited by

          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 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB