/locate command

[Google Trad]
Hello.
How can we locate a particular type of structure like a Village like the /locate command?
Thank you

bonjour.
Comment est ce qu’on peut localiser un type de structure particulier comme un Village comme la commande /locate ?
Merci

The vanilla command uses net.minecraft.world.World#findNearestStructure, you can use it directly if you project is already set up for that.

On peut pas avec l’api Sponge ? Comment le récupère ? Je connais pas forge.

[Google Trad]
Can not with the api Sponge? How does it recover? I do not know forge.

Bon je pense qu’en français ça sera plus simple ^^

Sponge n’a pas d’équivalent pour cette fonctionnalité, donc pour utiliser la méthode que j’ai donné dans ma première réponse il faut avoir configuré son projet pour avoir accès aux classes du serveur vanilla (en gros avec ForgeGradle).

Autrement tu peux ouvrir un ticket sur SpongeAPI pour demander à ajouter cette méthode dans l’API.

J’ai réussi a l’ajouter mais je ne sais pas comment y utiliser ensuite. J’ai presque jamais codé sur forge.

Tu es français ?

Si tu as configuré ForgeGradle correctement il faut que tu exécutes la tâche Gradle setupDecompWorkspace, tu devrais maintenant pouvoir utiliser la classe net.minecraft.world.World.

La manière dont Sponge fonctionne permet de cast un org.spongepowered.api.world.World en net.minecraft.world.World, il ne reste plus qu’à appeler la méthode.

J’ai juste oublié de prévenir que ce qui utilise des classes du serveur vanilla ne fonctionnera pas forcément sur tous les serveurs (comme les serveurs Lantern par exemple). Le mieux serait d’avoir une méthode dans l’API ^^.

Et oui je suis français :slight_smile:

Merci, j’ai réussi:

        net.minecraft.world.World world = (net.minecraft.world.World)player.getWorld();
        BlockPos blockPos = new BlockPos(player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ());

        BlockPos findNearestStructure = world.findNearestStructure("Village", blockPos, true);

        ToolCore.getLogger().info(findNearestStructure.toString());

Dernière question: est ce qu’il existe une sorte de liste de toute les structures EndCity, Village… ? Ca utilise BlockPos au lieu de Vector3d, relou^^

Le site ram a mort^^

Pour avoir toutes les structures d’un monde ça sera plus compliqué, net.minecraft.world.gen.structure.MapGenStructure#structureMap a l’air de contenir toutes les structures d’un certain type (village, stronghold, …) pour un monde. Je tiens à préciser que je ne connais absolument rien à la génération dans Minecraft.

La principale difficulté est que le field n’est pas accessible normalement, pour ça tu peux utiliser les Access Transformers pour rendre le field public. Mais il faut aussi avoir accès au MapGenStructure, et là tu n’as pas de moyen “normal” d’y accéder, chaque IChunkGenerator a ses propres MapGenStructure donc il va falloir que tu te débrouilles pour gérer chaque générateur, sachant que chaque mod peut avoir ses propres générateurs (il faudra les gérer au cas par cas).

Pour le site les sysops sont au courant ^^

J’ai cherché les nom dans le code et je me suis fait une petite liste pour le moment:

            LinkedList<String> listStructure = new LinkedList<>();
            listStructure.add("Mansion");
            listStructure.add("Mineshaft");
            listStructure.add("Monument");
            listStructure.add("Stronghold");
            listStructure.add("Temple");
            listStructure.add("Village");

            listStructure.add("Fortress");

            listStructure.add("EndCity");

Je pourrais peut être en faire un CatalogType pour que ça soit plus propre. Vivement que ça soit dans l’API car je suis en train de créer un petit plugin GPS et ça complique un peut plus le code, mais bon ça va.