La hauteur du puit d'un village



  • Bonjour,

    J'aimerai savoir s'il y a un moyen de récupérer la hauteur du puit d'un village dans la fonction appelée par mon handler (donc sans le paramètre world). 
    En effet, je peux récupérer cette hauteur dans addCompontentParts (avec World.getHeight), mais ça veut dire que la boundingBox entrée initialement est fausse et j'ai l'impression que ça pose problème…

    La fonction en question :

    
    public static WellCellar createPiece(StructureVillagePieces.Start start, int type, Random rand) {
        int x = start.getBoundingBox().minX;
        int y = start.getBoundingBox().minZ;
        int z = start.getBoundingBox().minZ;
    
        EnumFacing facing = EnumFacing.EAST;
    
        StructureBoundingBox sbb = StructureBoundingBox.getComponentToAddBoundingBox(x, y, z , 0, 0, 0, 4, 4, 4, facing);
        return new WellCellar(start, type, rand, sbb, facing);
        }
    
    

    X et Z sont justes mais Y retourne systématiquement 64...



  • La hauteur d'un puit que tu sélectionne d'une quelconque manière ou la hauteur du puit le plus proche du joueur ?



  • @'aypristyle':

    La hauteur d'un puit que tu sélectionne d'une quelconque manière ou la hauteur du puit le plus proche du joueur ?

    En fait, ma fonction est éxécutée à chaque création d'un nouveau village, je détecte où est le puit (avec le point start qui est sur un bloc du puit), et j'aimerai ensuite l'embellir en quelque sorte. Ca marche bien mais la valeur Y du start (ou directement du puit en prenant List<structurecomponent>[0]) est toujours à 64 et ne dépend pas de la hauteur réelle du puit</structurecomponent>



  • Tu as essaye d'ajouter une fonction qui détecte combien il y a de blocs d'air en dessous de ton point start et te retourne cette valeur ?



  • @'aypristyle':

    Tu as essaye d'ajouter une fonction qui détecte combien il y a de blocs d'air en dessous de ton point start et te retourne cette valeur ?

    Je vois pas trop comment faire ça sans avoir accès à World, dans ce cas ça revient à faire :
    int y = worldIn.getHeight(sbbIn.minX, sbbIn.minZ) ;

    Ce que je recherche avant tout c'est comprendre comment minecraft spawn le puit à la bonne hauteur en ayant comme Y 64 (alors que le Y réel est différent), que je puisse faire la même chose !



  • Ceci est un extrait des sources minecraft sur les puits ça pourrait t'intéresser

      public static class Well extends StructureVillagePieces.Village
            {
                public Well()
                {
                }
    
                public Well(StructureVillagePieces.Start start, int type, Random rand, int x, int z)
                {
                    super(start, type);
                    this.setCoordBaseMode(EnumFacing.Plane.HORIZONTAL.random(rand));
    
                    if (this.getCoordBaseMode().getAxis() == EnumFacing.Axis.Z)
                    {
                        this.boundingBox = new StructureBoundingBox(x, 64, z, x + 6 - 1, 78, z + 6 - 1);
                    }
                    else
                    {
                        this.boundingBox = new StructureBoundingBox(x, 64, z, x + 6 - 1, 78, z + 6 - 1);
                    }
                }
    


  • @'aypristyle':

    Ceci est un extrait des sources minecraft sur les puits ça pourrait t'intéresser

      public static class Well extends StructureVillagePieces.Village
            {
                public Well()
                {
                }
    
                public Well(StructureVillagePieces.Start start, int type, Random rand, int x, int z)
                {
                    super(start, type);
                    this.setCoordBaseMode(EnumFacing.Plane.HORIZONTAL.random(rand));
    
                    if (this.getCoordBaseMode().getAxis() == EnumFacing.Axis.Z)
                    {
                        this.boundingBox = new StructureBoundingBox(x, 64, z, x + 6 - 1, 78, z + 6 - 1);
                    }
                    else
                    {
                        this.boundingBox = new StructureBoundingBox(x, 64, z, x + 6 - 1, 78, z + 6 - 1);
                    }
                }
    

    Oui c'est ce que j'utilise actuellement, justemment je comprends pas comment en déclarant une boundingbox avec y = 64 à 78, le puit spawn au sol, que le y soit supérieur ou inférieur



  • Alors c'est ce code ```java
                   if (this.field_143015_k < 0)
                   {
                       this.field_143015_k = this.getAverageGroundLevel(p_74875_1_, p_74875_3_);

    if (this.field_143015_k < 0)
                       {
                           return true;
                       }

    this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 3, 0);
                   }



  • @'AymericRed':

    Alors c'est ce code ```java
                   if (this.field_143015_k < 0)
                   {
                       this.field_143015_k = this.getAverageGroundLevel(p_74875_1_, p_74875_3_);

    if (this.field_143015_k < 0)
                       {
                           return true;
                       }

    this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 3, 0);
                   }

    niquel merci, j'ai du passer à côté 🙂
    C'est ce que je cherchais


  • Administrateurs

    Cette discussion concernait quelle version de minecraft ?



  • @'robin4002':

    Cette discussion concernait quelle version de minecraft ?

    Mon minecraft tournait en 1.11 lorsque je l'ai posée, mais je pense qu'elle concerne toutes les versions.


  • Administrateurs

    Le code pouvant être différent dans les anciennes versions je préfère déplacer ici.