Créer une zone



  • Bonjour !

    Il y a quelque chose que j'aimerais faire mais je n'y arrive pas !

    Ce serait de faire une zone en 3D un peu à la world edit d'un point A à un point B, mais je ne sais pas par où passer ou quoi utiliser si quelqu'un à une idée ce serait coo! 🙂

    Je pensais passer pas les AABB des blocs en passant par une TileEntity pour gérer la taille de la zone, mais je ne sais pas si c'est bon ou pas ?

    Merci de vos réponses !


  • Administrateurs

    Tu veux utiliser la zone pour quoi exactement ?
    Tu n'as pas besoin des AABB, tu as juste besoin d'un point A et d'un point B.



  • les zones seraient pour quand un joueur rentre dedans lancer une musique afficher un texte à l'écran comme quoi il rentre dans telle ville ou tel village …


  • Administrateurs

    Donc tu as justement besoin d'un point A et d'un point B.
    Pour vérifier si ton entité est dans la zone, dans un premier temps il faut :
    trouver qui de xA et xB est le plus grand ensuite. (juste un petit if)
    Ensuite il faut vérifier que la coordonnée x du joueur est plus grand que la petite valeur et plus petite que la grand valeur.
    ça donne un truc du genre :

    boolean inZone = false;
    double xA = (double)posA.getX();
    double xB = (double)posB.getX();
    if(xA < xB)
    {
       inZone = this.checkInZone(xA, xB, player.posX);
    }
    else
    {
       inZone = this.checkInZone(xB, xA, player.posX);
    }
    double yA = (double)posA.getY();
    double yB = (double)posB.getY();
    if(yA < yB)
    {
       inZone = this.checkInZone(yA, yB, player.posY);
    }
    else
    {
       inZone = this.checkInZone(yB, yA, player.posY);
    }
    double zA = (double)posA.getZ();
    double zB = (double)posB.getZ();
    if(yA < yB)
    {
       inZone = this.checkInZone(zA, zB, player.posZ);
    }
    else
    {
       inZone = this.checkInZone(zB, zA, player.posZ);
    }
    
    // si pour les 3 fois checkInZone(a, b, player) est true, inZone sera true, donc il est dans la zone
    
    private boolean checkInZone(double min, double max, double playerCoord)
    {
         return playerCoord > min && playerCoord < max;
    }
    

    C'est du vite fait, il y a sûrement moyen d'optimiser ça.

    Après pour enregistrer les zones, pas sûr qu'un tile entity soit la meilleur idée. J'enregistrerai plutôt dans le monde : http://www.minecraftforgefrance.fr/showthread.php?tid=2444



  • Que signifie le posA et posB ?


  • Administrateurs

    Deux BlockPos, un pour chaque point.



  • Pour cette méthode le mieux serait de passer par un event ou d’appeler et d'enregistrer le tout dans le WorldSavedData ?