1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Résolu datapack achievement en commun / party

Discussion dans 'Commands blocks & Redstone' créé par Chelocad, 24 Avr 2020.

Tags:
  1. Chelocad

    Chelocad Bûcheron

    Inscrit:
    24 Avr 2020
    Messages:
    100
    Points:
    39
    Bonjour,

    Je voudrais installer sur mon serveur un datapack qui permette à tous les joueurs sur un même serveur d'avoir les mêmes achievements réalisés.

    Je m'explique: sur mon serveur 1.15.2 je compte mettre des datapacks qui ajoutent des achievements dont certain sont très compliqués à réaliser et/ou donnent une récompense après réalisation. Sauf que je n'ai pas envie qu'on refasse la manip pour chaque joueur.

    Après quelques recherches je suis tombé d'abord sur un mod nommé "together forever" (lien ici ... oups pas ça lui) sauf que le problème c'est que ce mod n'est pas disponible en 1.15.2 mais en 1.12 ;( . J'ai trouver aussi un datapack disponible en 1.13 (ici).

    Du coup j'ai décidé de porter mon attention sur ce datapack et regarde plus en profondeur ce qu'il faisait (voici quelque schreenshot qui devrait vous aidez à comprendre comment il marche) :

    Capture d’écran 2020-04-24 à 16.51.06.png

    Capture d’écran 2020-04-24 à 16.52.20.png

    la fonction init.mcfunction sert juste à envoyer un message à tout les joueurs pour leur dire qui à créer le datapack avec le lien vers la vidéo de présentation, sans intérêt pour ce topic je pense.



    Si je me trompe pas ce datapack réalise la commende suivante pour chaque achievement :

    /execute as @a[advancements={minecraft:story/<achievement>=true}] run advancement grant @a[advancements={minecraft:story/<achievement>=false}] only minecraft:story/root

    Cette commande fait executer une commande à tous les joueurs ayant l'achievement correspondant une commande qui l'accorde à ceux qui ne l'ont pas

    Seulement il y a un défaut avec ce procéder: tous les joueurs doivent être op.
    Ne connaissant pas super bien le fonctionnement des datapacks je ne sais pas si les commande s'execute tout le temps ou si elle ne s'exécute que après obtention. Je pencherais plutôt pour la première, avantage: pas besoin de faire de devoir créer un système de commande qui détecte un avancement et l'accorde aux autres joueurs,
    désavantage: avec un certain nombre d'achievement je pense que ce datapack pourrait faire laguer un serveur (je compte ajouter plus de 600 achievements)

    Donc voilà je me tourne vers vous pour répondre à plusieurs de mes questions:
    - Est-ce-que ce datapack fonctionne bien comme je le pense ?
    - Quand un datapack ajoute un achievement est-il inscrit dans les achievement "minecraft" ou il est dans un autre "rubrique" ?
    - Est-il possible de faire le même effet que ce datapack en imaginant que l'on est fait une liste de tous les achievements réaliser par les joueurs et dès que celle-ci ce voit ajouter un achievement elle l'accorde à tous les autres joueurs ?
    - Est-il possible de faire des variable dans les commande Minecraft ?
    (ce qui permettrais de ne pas avoir à copier plusieurs centaine de ligne ... littéralement, même si un programme python me permettrais de les généré uniquement avec les nom des achievements)

    Je tiens à préciser que le serveur étant privé je n'ai pas besoin de faire un système qui gère les groupes de joueurs auxquels attribuer les achievements (des party en somme) même une fois le datapack réaliser faire ce genre de chose ne devrait pas être trop compliqué, enfin je crois.

    Merci d'avance.
     
  2. Julenrafh

    Julenrafh Explorateur

    Inscrit:
    7 Juin 2019
    Messages:
    51
    Points:
    20
    Sexe:
    Homme
    Je n'est pas bien compris. Tu cherches à savoir comment ajouter des avancements grâce à un data pack, ou alors comment donner une récompense lorsque l'on réussie un advancement ajouté par un data pack ?
     
  3. Chelocad

    Chelocad Bûcheron

    Inscrit:
    24 Avr 2020
    Messages:
    100
    Points:
    39
    mon but ultime serait de faire un datapack qui permet de faire en sorte que tout les joueur sur un même serveur est les mêmes achvivements.
     
  4. Julenrafh

    Julenrafh Explorateur

    Inscrit:
    7 Juin 2019
    Messages:
    51
    Points:
    20
    Sexe:
    Homme
    Bah ça va être plutôt simple! Je pense que tu as dû suivre le tutoriel de Minecraft France qui est obsolète car depuis la 1.13, un data pack s'applique dans le dossier du monde et non dans les fichiers de chaque joueurs. Donc en gros quand tu met un data pack dans le un serveur, il va s'appliquer pour tous les joueurs connecté de base, sans faire de manipulation. Puisque le tutoriel de Minecraft France est obsolète je t'explique comment faire:

    1.Première étape:

    Crée un dossier et renomme le avec le nom que tu veux. Crée un fichier txt dedans et copy colle cela:
    {
    "pack": {
    "pack_format": 1,
    "description": "Par Chelocad"
    }
    }
    Ensuite renomme le fichier en "pack" et modifie l'extension du fichier ".txt" par ".mcmeta. En gros ton fichier aura ce nom: pack.mcmeta
    Crée aussi dans le dossier un autre dossier appelé "data".

    image.png
    Dans le dossier data, crée un autre dossier que tu appeles avec le nom que tu veux (je te conseille ton pseudo et attention de ne pas utiliser de majuscules ni de espaces). Dans le nouveau dossier créé, fait encore un autre dossier appelé "advancements". Dans ce nouveau dossier, tu fare des sous dossier avec le nom des nouvelles catégories que tu veux crée.
    Capture d’écran 2020-05-06 à 13.23.48.png
    Voila pour la première étapes. Je te met la suite dans un autre messages.
     
  5. Julenrafh

    Julenrafh Explorateur

    Inscrit:
    7 Juin 2019
    Messages:
    51
    Points:
    20
    Sexe:
    Homme
    Ensuite il faut que fasse les advancements. Va dans un de tes sous dossier (les dossier que tu as crée dans le dossier advancements). Crée un fichier en .json et puis suis le tutoriel de minecraft France ou ils explique comment crée des fichiers advancements car il est encore correcte sur la façon de faire les fichiers
    https://www.minecraft-france.fr/tutoriel-creez-vos-progres/
    Je te donne un exemple de data pack qui fait ce que tu cherches.
     

    Fichiers attachés:

  6. Chelocad

    Chelocad Bûcheron

    Inscrit:
    24 Avr 2020
    Messages:
    100
    Points:
    39
    Ah je me suis mal exprimé :facepalm:.
    Bon premièrement merci de m'avoir répondu je perdais espoir
    En fait ce que je voulais faire c'est un datapack qui fait en sorte que dès qu'une personne obtient une réussite d'un achievement cela s'applique à tout le monde (en gros tout les joueur ont les mêmes achievements réussis comme non complétés) et ce peut importe l'origine des achievements (datapack et vanilla).
    Et pour ce qui est du tuto comment faire un datapack je te remercie bien que je savais déjà comment faire.
     
  7. Julenrafh

    Julenrafh Explorateur

    Inscrit:
    7 Juin 2019
    Messages:
    51
    Points:
    20
    Sexe:
    Homme
    Hum, je pense qu'il va falloir effectivement crée une function. Ou alors mettre une commande execute qui testera quand un advancement est fait puis le donnera a tous le monde. Il faudra alors la mettre dans un command block chaine.
     
  8. Chelocad

    Chelocad Bûcheron

    Inscrit:
    24 Avr 2020
    Messages:
    100
    Points:
    39
    oui j'y avais penser mais le problème c'est qu'il faut aussi faire attention aux joueurs hors ligne qui se connecte après, du coup je pensais faire une comparaison de la liste des achievements des joueurs avec celle commune et que chaque fois que une des deux est modifier ou qu'un joueur se co.
     
  9. Julenrafh

    Julenrafh Explorateur

    Inscrit:
    7 Juin 2019
    Messages:
    51
    Points:
    20
    Sexe:
    Homme
    Si tu met la commande dans un block de commande en type "chaine". Il suffit que 1seul des joueurs possédant le succés soit connecté pour le donner a tous les autres. En gros dans un block chaine ca ne vas pas activer la commande 1 seul fois lorsque le succès est obtenue mais tous le temp meme quand personne est connecté.
     
  10. Chelocad

    Chelocad Bûcheron

    Inscrit:
    24 Avr 2020
    Messages:
    100
    Points:
    39
    oui je sais mais ça risque de créer du lag non (sur mon serveur j'ai plus ou moins 400 achievements)
     
  11. Julenrafh

    Julenrafh Explorateur

    Inscrit:
    7 Juin 2019
    Messages:
    51
    Points:
    20
    Sexe:
    Homme
    Non ça ne vas pas créer de lag, juste met les messages de block de commandes en false. Pour te donner un example lorsque que l'on casse un block dans minecraft, minecraft casse et remets tous les blocks du chunks et tous en moins d'une seconde sans qu'on le voyent. C'est pas une simple commande qui va crée du lag.
     

Partager cette page