MFF

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

    Faire pivoter la hitbox

    Planifier Épinglé Verrouillé Déplacé Résolu Anciennes versions
    1.6.4
    5 Messages 2 Publieurs 1.8k 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.
    • SugarshyS Hors-ligne
      Sugarshy
      dernière édition par

      Bijour tout le monde !

      Bon alors, je m’explique !
      Mon bloc fais sous forme d’un TileEntity se place dans un sens différent suivant le sens dans lequel on regarde (comme un four ou un coffre en fait), et se que j’aimerai c’est que sa hitbox (dont l’aspect est modifié) pivote elle aussi !

      Voila, merci d’avance pour votre aide, et longue vie a forge !

      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

        @SideOnly(Side.CLIENT)
        public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
        {
        return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
        }
        
        public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
        {
        return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
        }
        

        À mettre dans la classe du bloc. La première, c’est pour la hitbox côté client donc la sélection. L’autre c’est pour le serveur, donc la collision.
        Si tu as fait ton système de direction avec le metadata du bloc, tu fais simplement des conditions avec world.getBlockMetadata(x, y, z)
        Sinon si tu as fait sur le TileEntity :

        TileEntity te = world.getBlockTileEntity(x, y, z)
        if(te != null && te instanceof MonTileEntity)
        {
        MonTileEntity monTe = (MonTileEntity)te;
        if(te.getDirection == 0)
        {
        return AxisAlignedBB.getAABBPool().getAABB((double)….
        }
        else if .....
        }
        return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); // axis par défaut si jamais il y a un problème avec le TileEntity
        
        1 réponse Dernière réponse Répondre Citer 0
        • SugarshyS Hors-ligne
          Sugarshy
          dernière édition par

          J’ai mis ```java
          public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
          {
          return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
          }
          @SideOnly(Side.CLIENT)
          public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
          {
          return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
          }

          dans mon bloc, et redéfini ainsi ma hitbox.
          
          Je fais ainsi pour ma rotation: ```java
          public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
          {
          int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
          world.setBlockMetadataWithNotify(x, y, z, direction, 2);
          
          }
          

          Mais pour le reste je n’ai absolument pas compris ! ^^’

          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

            Ta rotation fonctionne avec le metadata donc fait ça :

            
            public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
            {
            if(world.getBlockMetadata(x, y, z) == 0)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + 0.8D, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
            }
            else if(world.getBlockMetadata(x, y, z) == 1)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + 0.8D, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
            }
            else if(world.getBlockMetadata(x, y, z) == 2)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 0.2D, (double)y + this.maxY, (double)z + this.maxZ);
            }
            else if(world.getBlockMetadata(x, y, z) == 3)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + 0.2D);
            }
            else
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
            }
            }
            
            @SideOnly(Side.CLIENT)
            public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
            {
            if(world.getBlockMetadata(x, y, z) == 0)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + 0.8D, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
            }
            else if(world.getBlockMetadata(x, y, z) == 1)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + 0.8D, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
            }
            else if(world.getBlockMetadata(x, y, z) == 2)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 0.2D, (double)y + this.maxY, (double)z + this.maxZ);
            }
            else if(world.getBlockMetadata(x, y, z) == 3)
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + 0.2D);
            }
            else
            {
            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
            }
            }
            

            Si tu prend ça, tu verra que les hitbox sont différents en fonction de la direction. Pour l’exemple j’ai fait un truc random, à toi d’adapter les valeurs en fonctions de tes besoins. Utilise le débug pour avoir les changements en direct 😉

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

              Sa marche, merci infiniment !

              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