Trouver les entités dans un monde
-
Bonsoir, je voudrais savoir si a la manière des crash report si l’on pouvait prendre les entitées du monde (joueurs) et les afficher ainsi que leurs coordo quand l’on clique droit sur une boussole spécial, ensuite en afficher 5 (les plus proche dans le tchat du joueur)
Je ne vois pas du tout comment faire
J’espere que vous avez une réponse
Merci -
Pas trop le temps, regarde avec la variable loadedEntityList de la classe Word
-
Dans la classe world il a une fonction pour avoir toutes les entités étant dans une box spécifié.
Suffit d’utiliser cette fonction et de parcourir la liste qu’elle retourne. -
Je la parcours depuis un moment mais c’est long
-
Ou tu fais une liste des joueurs du monde par un packet et tu testes les plus proche et tu renvoie par chat le résultat
-
Euh me dire trop de chose et on me perd xD
j’ai trouvé ça :
public CrashReportCategory addWorldInfoToCrashReport(CrashReport p_72914_1_) { CrashReportCategory crashreportcategory = p_72914_1_.makeCategoryDepth("Affected level", 1); crashreportcategory.addCrashSection("Level name", this.worldInfo == null ? "????" : this.worldInfo.getWorldName()); crashreportcategory.addCrashSectionCallable("All players", new Callable() { private static final String __OBFID = "CL_00000143"; public String call() { return World.this.playerEntities.size() + " total; " + World.this.playerEntities.toString(); } }); crashreportcategory.addCrashSectionCallable("Chunk stats", new Callable() { private static final String __OBFID = "CL_00000144"; public String call() { return World.this.chunkProvider.makeString(); } }); try { this.worldInfo.addToCrashReport(crashreportcategory); } catch (Throwable throwable) { crashreportcategory.addCrashSectionThrowable("Level Data Unobtainable", throwable); } return crashreportcategory; }
-
List <entity>list = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(-10, -10, -10, 10, 10, 10)); for(Entity entity : list) { //fais ce que tu veux avec les entités }
Avec ça tu obtiens toutes les entités se trouvant entre x = -10, y = -10, z = -10 et x = 10, y = 10, z = 10.
Si tu veux toutes les entités autours d’un joueur tu as juste à prendre les coordonnées du joueur +/- la taille que tu veux.
Ou alors utiliser directement la box de collision du joueur et faire un .expand(x, y, z).</entity> -
donc je fais genre :
onItemRightclick
List <entity>list = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(-10, -10, -10, 10, 10, 10));
p.chatmessagetrucdugenre list trucdugenre ?Edit si oui erreur sur AxisAlignedBB The constructor AxisAlignedBB(double, double, double, double, double, double) is not visible</entity>
-
Remplaces par AxisAlignedBB.getBoundingBox(-10, -10, -10, 10, 10, 10)
Je suis en 1.8, visiblement en 1.7 c’était différent. -
ça marche niquel mais je get toutes les Entité cochon joueurs ect on peut pas prendre que 5 joueurs ?
-
Tu as juste à mettre la taille de la liste à 5 même si c’est pas très optimisé
-
Beh remplace Entity.class, par EntityPlayer.class.
-
Ok ça aussi ça marche mais dernier probleme les joueurs que ne capte que les player que mon perso vois alors que je voudrais qu’il capte les joueurs dans toute la map C’est possible d’après vous ?
-
Sois tu mets de très grandes dimensions dans le code de robin, soit tu adaptes avec la liste World#loadedEntityList
-
C’est à dire ? Tu veux faire une recherche dans tous les joueurs du monde ?
-
Il y a pas un field avec tous les joueurs connectés dans World ?
-
Dans ce cas tu as juste à faire une boucle sur world.playerEntities
-
public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { List <entity>list = world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(-10, -10, -10, 10, 10, 10).expand(5000, 300, 5000)); for(Entity entity : list) { player.addChatComponentMessage(new ChatComponentText(""+list)); } return item; }
Normalement ça devrait marcher non ?</entity>
-
Non car il faut aussi expand du côté négatif, mais fais ce qu’a dit Robin, plus simple
-
expand étant des deux côtés.
Mais bon la ce code va être lourd alors que tu peux faire bien plus léger :public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { for(Entity entity : world.playerEntities) { player.addChatComponentMessage(new ChatComponentText(entity.getCommandSenderName() + " x=" + entity.posX + " y=" + entity.posY + " z=" + entity.posZ)); } return item; }