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

    Résolu Problème de collision

    1.11.x
    1.11.x
    2
    3
    861
    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.
    • Alexandre1156
      Alexandre1156 dernière édition par

      Salut,

      Dans mon mod, je transforme mon joueur en poulpe et je change ainsi sa BoundingBox.
      Le problème est que celle-ci va avancer tout seul vers le sud-est jusqu’à rencontrer un bloc et glitcher dedans.
      Par contre, si je suis entouré de blocs, le problème disparaît.

      Voici où je change la BoundingBox :

      
      public class SquidshroomEvent extends ShroomEvent {
      
         @Override
         protected void onTickPlayer(EntityPlayer p, Phase phase, Side side) {
            IPlayerMush mush = p.getCapability(PlayerMushProvider.MUSH_CAP, null);
            if(phase == TickEvent.Phase.END){
               if(side.isClient() && this.isSquid && p.getName().equals(Minecraft.getMinecraft().player.getName())) 
                  this.setSquidBoundingBoxToPlayer(p); //Permet d'afficher soit même en poulpe
               else if(side.isClient() && MushPowers.getInstance().isSquid(p.getName()))
                  this.setSquidBoundingBoxToPlayer(p); //Permet d'afficher les autres en poulpe
               else if(side.isServer() && p.getCapability(PlayerMushProvider.MUSH_CAP, null).isSquid())
                  this.setSquidBoundingBoxToPlayer(p); //Permet de changer la BoundingBox côté serveur
               else if(p.eyeHeight != p.getDefaultEyeHeight())
                  p.eyeHeight = p.getDefaultEyeHeight(); //Lorsqu'on redevient normale, la BoundingBox normal du joueur est automatiquement remis mais pas les yeux
            }
         }
      }
      
      private void setSquidBoundingBoxToPlayer(EntityPlayer p){
      if (0.8f != p.width || 0.8f != p.height) {
                  p.width = 0.8f;
                  p.height = 0.8f;
                  p.eyeHeight = 0.4f;
                  AxisAlignedBB axisalignedbb = p.getEntityBoundingBox();
                  p.setEntityBoundingBox(new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, 
                  axisalignedbb.minX + (double)p.width, axisalignedbb.minY + (double)p.height, axisalignedbb.minZ + (double)p.width));
             }
      }
      
      

      J’ai fait une vidéo pour mieux voir le problème :
      https://youtu.be/N8LYrPjNsSM
      On peux ainsi voir que le cube rouge dépasse du cube blanc sauf si je suis piégé.

      Merci !

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        Salut,
        On avait exactement le même soucis sur NHG avec le kit mouton (qui a aussi une hitbox différente).
        Voila notre code actuel :

        /**
        *
        * @param player
        * @param width
        * @param height
        * @param eyeHeight
        */
        public static void setSize(EntityPlayer player, float width, float height, float eyeHeight)
        {
        if(width != player.width || height != player.height)
        {
        player.eyeHeight = eyeHeight;
        float f = player.width;
        player.width = width;
        player.height = height;
        
        double d0 = width / 2.0D;
        player.setEntityBoundingBox(new AxisAlignedBB(player.posX - d0, player.posY, player.posZ - d0, player.posX + d0, player.posY + player.height, player.posZ + d0));
        
        if (player.width < f)
        {
        return;
        }
        
        if(!player.world.isRemote && player.width > f)
        {
        boolean firstUpdate = ObfuscationReflectionHelper.getPrivateValue(Entity.class, player, "firstUpdate", "field_70148_d");
        if(firstUpdate)
        {
        player.move(MoverType.SELF, (f - player.width) / 2, 0.0D, (f - player.width) / 2);
        }
        }
        }
        }
        
        
        1 réponse Dernière réponse Répondre Citer 0
        • Alexandre1156
          Alexandre1156 dernière édition par

          Marche parfaitement ! Merci Robin !

          1 réponse Dernière réponse Répondre Citer 0
          • 1 / 1
          • Premier message
            Dernier message
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB