Résolu 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 !
-
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 …
-
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 ?
-
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 ?