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

    Non résolu Bug Direction d'une monture volante

    Sans suite
    1.12.2
    2
    2
    116
    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.
    • P
      PseudoTropStylé dernière édition par

      Bonjour, je travaille sur une entité volante qui peut être monté mais j’ai un problème concernant la direction. Mon entité peut seulement avancer en direction de l’Est et du Sud ce qui est quand même très problématique. Je vous met ci dessous la class de mon Entité, merci d’avance.

      public class EntityVolante extends Entity{
      
          public boolean inputForward = false;
          public boolean inputRight = false;
          public boolean inputBack = false;
          public boolean inputLeft = false;
          public boolean inputUp = false;
          public boolean inputDown = false;
      
          private int debug = 0;
      
          public EntityVolante(World worldIn) {
              super(worldIn);
              setSize(1.0f, 1.0f);
              isImmuneToFire = true;
          }
      
          @Override
          public boolean canBeCollidedWith() {
              return !this.isDead;
          }
      
          @Override
          public boolean canBePushed() {
              return true;
          }
      
          @Override
          protected boolean canBeRidden(Entity entityIn) {
              return true;
          }
      
          @Override
          public boolean canRiderInteract() {
              return true;
          }
      
          @Override
          public boolean shouldDismountInWater(Entity rider) {
              return false;
          }
      
          @Override
          public double getMountedYOffset() {
              return 0.0d;
          }
      
          @Override
          public boolean canPassengerSteer() {
              return getControllingPassenger() instanceof EntityPlayer;
          }
      
          @Override
          public boolean processInitialInteract(EntityPlayer player, EnumHand hand) {
              if (player.isSneaking()) {
                  return false;
              } else {
                  if (!this.world.isRemote) {
                      player.startRiding(this);
                  }
                  return true;
              }
          }
      
          @Override
          public AxisAlignedBB getCollisionBox(Entity entityIn) {
              return getEntityBoundingBox();
          }
      
          @Override
          public boolean attackEntityFrom(DamageSource source, float amount) {
              if (source.getTrueSource() instanceof EntityPlayer) {
                  this.setDead();
                  return true;
              }
              return false;
          }
      
          @Override
          public Entity getControllingPassenger() {
              List<Entity> list = this.getPassengers();
              return list.isEmpty() ? null : (Entity) list.get(0);
          }
      
          @Override
          public AxisAlignedBB getCollisionBoundingBox() {
              return null;
          }
      
          @SideOnly(Side.CLIENT)
          public void updateControls() {
              Minecraft mc = Minecraft.getMinecraft();
      
              if (this.getControllingPassenger() == mc.player) {
                  GameSettings settings = mc.gameSettings;
      
                  this.inputForward = settings.keyBindForward.isKeyDown();
                  this.inputRight = settings.keyBindRight.isKeyDown();
                  this.inputBack = settings.keyBindBack.isKeyDown();
                  this.inputLeft = settings.keyBindLeft.isKeyDown();
                  this.inputUp = settings.keyBindJump.isKeyDown();
      
      
      
              } else {
                  this.inputForward = false;
                  this.inputRight = false;
                  this.inputBack = false;
                  this.inputLeft = false;
                  this.inputUp = false;
                  this.inputDown = false;
      
      
              }
          }
      
          @Override
          public void onUpdate() {
              super.onUpdate();
      
              this.onGround = false;
      
      
      
              if (this.world.isRemote) {
                  this.updateControls();
              }
      
              this.updateMotion();
              this.updateRotation();
      
              this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ);
          }
      
          public void updateRotation() {
              if (this.getControllingPassenger() instanceof EntityPlayer) {
                  this.rotationYaw = MathHelper.wrapDegrees(this.getControllingPassenger().rotationYaw);
                  this.rotationPitch = this.getControllingPassenger().rotationPitch;
              }
          }
      
          public void updateMotion() {
              double rotX  = -MathHelper.sin(this.rotationYaw * 0.017453292F);
              double rotZ  =  MathHelper.cos(this.rotationYaw * 0.017453292F);
              float fakeRotationPitch = this.rotationPitch;
      
              double speed = 0.02d;
      
              if (inputDown && !inputUp) {
                  if (inputForward) {
                      fakeRotationPitch = (fakeRotationPitch + 90f) / 2f;
                  } else if (inputBack) {
                      fakeRotationPitch = (fakeRotationPitch - 90f) / 2f;
                  } else {
                      this.motionY -= speed;
                  }
              }
      
              if (inputUp && !inputDown) {
                  if (inputForward) {
                      fakeRotationPitch = (fakeRotationPitch - 90f) / 2f;
                  } else if (inputBack) {
                      fakeRotationPitch = (fakeRotationPitch + 90f) / 2f;
                  } else {
                      this.motionY += speed;
                  }
              }
      
              double lookVecX = rotX * MathHelper.cos(fakeRotationPitch * 0.017453292F);
              double lookVecY = -MathHelper.sin(fakeRotationPitch * 0.017453292F);
              double lookVecZ = rotZ * MathHelper.cos(fakeRotationPitch * 0.017453292F);
      
              if (inputForward) {
                  this.motionX += speed * lookVecX;
                  this.motionY += speed * lookVecY;
                  this.motionZ += speed * lookVecZ;
              }
              if (inputBack) {
                  this.motionX -= speed * lookVecX;
                  this.motionY -= speed * lookVecY;
                  this.motionZ -= speed * lookVecZ;
              }
              if (inputLeft) {
                  this.motionX += speed * rotZ;
                  this.motionZ += speed * -rotX;
              }
              if (inputRight) {
                  this.motionX += speed * -rotZ;
                  this.motionZ += speed * rotZ;
              }
      
              this.motionX *= 0.90d;
              if (this.motionX < 0.0001d) this.motionX = 0;
              this.motionY *= 0.90d;
              if (this.motionY < 0.0001d) this.motionY = 0;
              this.motionZ *= 0.90d;
              if (this.motionZ < 0.0001d) this.motionZ = 0;
          }
      
          @Override
          protected void entityInit() {
      
          }
      
          @Override
          protected void readEntityFromNBT(NBTTagCompound compound) {
      
          }
      
          @Override
          protected void writeEntityToNBT(NBTTagCompound compound) {
      
          }
      }
      
      1 réponse Dernière réponse Répondre Citer 0
      • LeBossMax2
        LeBossMax2 dernière édition par LeBossMax2

        Bonjour,
        Il y a un problème sur cette partie :

                this.motionX *= 0.90d;
                if (this.motionX < 0.0001d) this.motionX = 0;
                this.motionY *= 0.90d;
                if (this.motionY < 0.0001d) this.motionY = 0;
                this.motionZ *= 0.90d;
                if (this.motionZ < 0.0001d) this.motionZ = 0;
        

        Quand la motion est négative, tu la met à 0, donc tu peux de déplacer que dans une direction. Il faudrait plutôt faire:

        if (Math.abs(this.motionTruc) < 0.0001d) this.motionTruc = 0;
        

        Autre chose, je pense que ton updateControls va crash sur serveur. Il faudrait passer par un proxy pour pas avoir de problème

        1 réponse Dernière réponse Répondre Citer 0
        • Déplacé de Support pour les moddeurs par  robin4002 robin4002 
        • 1 / 1
        • Premier message
          Dernier message
        Design by Woryk
        Contact / Mentions Légales

        MINECRAFT FORGE FRANCE © 2018

        Powered by NodeBB