Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

  • Annonces

    • Pskyco

      Bukkit France passe sous Discord !   02/20/16

      Bukkit France est désormais passé sur Discord, au revoir donc notre vieux Teamspeak ! Téléchargez le client et venez nous rejoindre sur notre salon en suivant les instructions suivantes.
      M-à-j du 25/02/2017 : Désormais, seuls les comptes actifs sur le forum se verront donner l'accès au Discord, ce dernier n'est pas une plateforme d'aide de la même manière que le chat.
TheElectronWill

Utiliser les fichiers de configuration

35 messages dans ce sujet

Bonsoir à tous et à toutes !
Avant de commencer ce tuto, je voudrais juste que vous sachiez que c'est mon premier sur bukkit. Donc si quelque chose ne va pas, n'hésitez pas à le signaler pour que je m'améliore :).

Vous allez apprendre comment utiliser des fichiers de configuration pour vos plugins bukkit. Voici comment sera organisé le tutoriel:

  • les fichiers config de bukkit
  • Le fichier config par défaut
  • Créer d'autre configurations
  • Ecrire dans un fichier config
  • Lire dans un fichier config
  • Exemple(s)

Pour ce tuto, je vous conseille d'avoir un minimum de connaissances en programmation de plugins bukkit. Vous aurez bien sûr besoin d'Eclipse Indigo for Java Developpers, d'un début de projet de plugin et donc d'un bukkit.jar ou d'un craftbukkit.jar.


1) Les fichiers config de bukkit
Bukkit utilise des fichiers au format "yaml" pour la configuration des plugins. Ces fichiers ont généralement pour extension .yml et contiennent des informations de cette manière:

nom de l'info : info

Une valeur est donc associée à un nom. C'est ce nom qui sera utilisé pour obtenir ou modifier une valeur.

Il est possible d'utiliser des "groupes" de valeurs:

villes:  Paris:    pays: France    statut: Capitale  Lyon:    pays: France    statut: Autre  Berlin:    pays: Allemagne    statut: Capitalenombres:  a: 1  b: 2.7  c: 3.5  d: 20123654789

Attention: les valeurs appartenant à un/des groupes sont nommées groupe.sous-groupe1.sous-groupe2.valeur

IMPORTANT: Le décalage d'une valeur (nombre d'espaces entre le début de la ligne et le nom de la valeur) détermine son groupe ou sous-groupe. Chaque valeur d'un sous-groupe doit être décalée par rapport au groupe supérieur.

Ici, la valeur "statut" de "Berlin" est donc appelée villes.Berlin.statut

Il est aussi possible d'utiliser des listes:


liste de noms:  - voiture  - tutoriel de développement Java  - alarme  - vélo  - cahier  - plugin bukkit

Vous pouvez (et c'est même conseillé) ajouter des commentaires dans les fichiers config, en ajoutant le signe # devant la ligne de commentaire. Mais cela ne peut pas être fait avec l'API bukkit: vous devez le faire vous même en écrivant dans le fichier.

 

 

2) Le fichier config par défaut
Il est possible d'utiliser un fichier de configuration "par défaut" pour votre plugin. Dans ce cas, vous devrez fournir un "modèle" du fichier config que vous placerez dans votre projet Eclipse.

Nommez ce "modèle" config.yml puis mettez les éléments que vous voulez dedans.
Ensuite, il faut dire à votre plugin de charger ce modèle. Pour cela, rajoutez ceci dans le onEnable() de votre classe principale, de préférence au début de la méthode:

saveDefaultConfig();

Ainsi, lorsque votre plugin se charge, il va copier le fichier config.yml de votre plugin dans: Server/plugins/Nom du plugin/config.yml.

Sachez que cette méthode vérifie si config.yml n'existe pas déjà dans Server/plugins/Nom du plugin. Vous n'avez pas besoin de vérifier cela, la configuration actuelle ne sera pas supprimée.

 

 

=> Pour accéder au fichier config.yml dans le dossier Server/plugins/Nom du plugin/config.yml utilisez la méthode getConfig()

=> Pour accéder au fichier config.yml par défaut, vous pouvez utiliser la méthode getConfig().getDefault()

 

 

3) Créer d'autres configurations
Si vous avez besoin de stocker beaucoup de données différents de configuration (ou même autre chose), vous pouvez avoir besoin d'utiliser plusieurs fichiers de configuration. Oui oui, c'est possible !!

L'api bukkit contient la classe FileConfiguration, qui représente un fichier de configuration (comme son nom l'indique :)). Pour pouvoir utiliser d'autres configurations, il faut créer un nouvel objet FileConfiguration pour chaque fichier .yml, comme ceci:

File fichierConfig = new File("/plugins/MonPlugin/mon_fichier.yml"); // Le fichier .ymlFileConfiguration config = YamlConfiguration.loadConfiguration(fichierConfig); // On lit le fichier avec YamlConfiguration pour récupérer un objet FileConfiguration

Ici, j'utiliserait donc un fichier de configuration qui s'appellera mon_fichier.yml et qui se trouvera dans /plugins/MonPlugin/.
NOTE: On n'a pas besoin de faire un modèle de configuration pour celles obtenues de cette manière, il faut juste créer le fichier .yml

4) Ecrire dans un fichier de configuration
Puisqu'il n'y a pas de modèle pour les fichiers config autres que celui par défaut, il va falloir faire autrement pour écrire dedans ou les modifier !
Il faut savoir que notre FileConfiguration possède des méthodes, qui permettent de modifier ou de lire le fichier.

Celle qui nous intéresse pour écrire/modifier des données (oui, c'est la même) est la suivante:
 

set(String, Object);

Le premier paramètre (String) est le nom de la valeur et le deuxième (Objet) est la valeur elle-même. Cette donnée peut être n'importe quel objet (un nombre int ou long, un booléen, une String, une liste, ...). Il est évidemment possible d'utiliser les valeurs contenues dans un ou plusieurs groupes, le tout est d'utiliser le bon nom de valeur.

Si vous exécutez ce code, vous verrez que votre configuration ne change pas. Du calme, c'est normal ! Après avoir fait les modifications, il faut sauvegarder la configuration !
Ça se fait comme cela:

try {    config.save(fichier_config)// Sauvegarde de la config dans "fichier_config"} catch (IOException e) {    e.printStackTrace;// Si on ne peut pas écrire dans le fichier on affiche l'erreur}

Le paramètre de la méthode save() est le fichier (File) dans lequel va être stockée votre configuration.


5) Lire dans un fichier config
Bon ! Une fois que vous avez vos fichiers config prêts, je vais vous apprendre comment lire ce qu'il y a dedans !
Encore une fois, nous allons utiliser des méthodes de l'objet FileConfiguration. Voici une liste de méthodes permettant de récupérer diverses données (dans les exemples suivants, la donnée s'appelle "nom de la donnée"):
Une donnée de type String:

config.getString("nom de la donnée");

Une donnée de type long:

config.getLong("nom de la donnée");

De type List<String>, c'est-à-dire une liste avec des String dedans:
 

config.getStringList("nom de la donnée");

De type boolean:

config.getBoolean("nom de la donnée");

Une donnée de n'importe quel type:

config.get("nom de la donnée");

Note: quand vous récupérez une donnée avec la méthode get(), vous obtenez un Objet. Pensez à le convertir pour pouvoir en tirer quelque chose !

Comme pour l'écriture/la modification de valeurs, il est possible d'utiliser des groupes.

6) Exemples de code
Obtenir des données à partir du fichier config par défaut et les écrire dans l'historique du serveur:
 

public void onEnable() {    if(getConfig() != null) {// Si la config existe        // on récupère la phrase "phrase1" dans la config actuelle et on l'écrit dans le log du serveur:        getLogger().info(getConfig().getString("phrase1"));    } else {        saveDefaultConfig();// Si elle n'existe pas alors on charge la config par défaut    }}

Ecrire des données dans un fichier config personnalisé (c'est-à-dire pas celui par défaut) et les récupérer ensuite:
 

File fichier = new File("/plugins/MonPlugin/configperso.yml");FileConfiguration config = YamlConfiguration.loadConfiguration(fichier);public void onEnable() {    if(!config.contains("ville"){//Si la config ne contient pas la donnée "ville"        config.set("ville", "Grenoble")// on l'écrit dedans        try {            config.save(fichierConfig); // Et on n'oublie pas de sauvegarder !        } catch (IOException ex) {            ex.printStackTrace();        }    } else { //Si la config contient cette donnée        getLogger().info("La ville est: " + config.getString("ville"));on l'écrit dans le log:    }}

Ecrire des données dans un fichier personnalisé en utilisant des groupes:
le code:

FileConfiguration config = YamlConfiguration.loadConfiguration(new File("/plugins/MonPlugin/configperso.yml"));config.set("serveur.mondes.world.nom", "World");config.set("serveur.mondes.world.id", 1);config.set("serveur.mondes.freebuild.nom", "Monde FreeBuild");config.set("serveur.mondes.freebuild.id", 2);config.set("serveur.plugins.EagleEye", true);config.set("serveur.plugins.SCPlugin", false);config.set("serveur.plugins.PluginsBaker", true);try{    config.save(new File("/plugins/MonPlugin/configperso.yml"));} catch (IOException e) { e.printStackTrace(); }

=> le résultat dans le fichier /plugins/MonPlugin/configperso.yml:

serveur:  mondes:    world:      nom: World      id: 1    freebuild:      nom: Monde FreeBuild      id: 2  plugins:    EagleEye: true    SCPlugin: false    PluginsBaker: true
9 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est très bien expliqué je trouve, merci :)

2 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites

pas de quoi ;) ça me fais plaisir de transmettre ce que je sais

Partager ce message


Lien à poster
Partager sur d’autres sites

Très bon tuto !

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Eyh sympas ! Je ne l'avais pas vu !

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Euh, un conseil, pour plus de lisibilité, entre le code en ' PHP ' ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'aime pas trop le code en PHP, c'est très différent de java...

Partager ce message


Lien à poster
Partager sur d’autres sites

Non c'est juste pour les couleurs, elles seront plus jolies.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est exactement pour çà ! D'ailleurs, c'est un site de plugins Minecraft, qui sont en Java, alors pourquoi ya pas de Java ?

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est fait !

Mais c'est vrai qu'il faudrait vraiment que le language Java soit disponible. On n'utilise que lui et, bien sûr, c'est le seul qui n'est pas disponible --'

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut à toi !

Tout d'abord merci beaucoup pour ce tuto parce que c'est le seul que j'ai trouvé sur le net !

J'ai un gros souci : j'ai essayé toutes tes méthodes mais mon fichier de config.yml ne se crée jamais !

J'ai vraiment besoin d'aide..

De plus, j'ai besoin d'appeler le fichier yml pour vérifier si le joueur a le droit ou non de parler une langue.

Pour ce faire, je dois vérifier si une booléenne est true ou false mais pas dans ma main class ! Est-ce que cela pose souci ? Y a t'il un code spécifique pour faire appel au fichier de config dans une autre class?

Toute la base est faite, mais j'ai besoin de mon fichier yml..

Merci d'avance

Skigen

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut !

 

J'utilise ce code :

import java.io.File;import java.io.IOException;import org.bukkit.configuration.file.FileConfiguration;import org.bukkit.configuration.file.YamlConfiguration;	                File config2 = new File("/plugins/MonPlugin/config2.yml");		FileConfiguration c2 = YamlConfiguration.loadConfiguration(config2);				c2.set("OK", "oui !");				try		{			c2.save(config2);		} catch (IOException e)		{			e.printStackTrace();		}

Pourquoi le fichier "config2" ne se crée pas ?

Merci d'avance !

Partager ce message


Lien à poster
Partager sur d’autres sites

@lial_slasher

 

 Je suis débutant dans la programmation et sincèrement ton post m'a aidé car j'avait faite quelques petites fautes en plus de celles que celui qui a écris cette page a fait, mais pour ton problème, je crois savoir comment t'aider.

 

1- Où est la déclaration de classe?

2- Toutes les actions que tu a demandé a ton plugin ne seront jamais exécutées si tu ne lui donne pas un "déclencheur" comme "public void onEnable(){Actions a faire}"          c'est probablement pour cette raison que ton fichier ne se crée pas

 

J’espère avoir pu t'aider,

Beninot

Partager ce message


Lien à poster
Partager sur d’autres sites

@Skigen

 

Assure toi que le "config.yml" par default(celui qui ce trouve dans ton plugin) contient bien au moins une valeur valide ; elle ne nécessite pas de t'être utile seulement, pour créer un fichier le programme a besoin que le fichier contienne une valeur.

 

J'espère avoir pu t'aider,

Beninot

Partager ce message


Lien à poster
Partager sur d’autres sites

Désolé, j'ai résolu le problème ... mais sans vous en faire part.

Voici donc la solution :

// Je suis dans la classe Plugin, par exemplepublic static String dataFolder = "plugins/nomDuPlugin";// Lorsque je veux instancier mon File :File f = new File(Plugin.dataFolder, "NomDuMonFichier.yml");FileConfiguration c = YamlConfiguration.loadConfiguration(f);

Partager ce message


Lien à poster
Partager sur d’autres sites

merci ^^

PS: désolé si j'ai pas été sur le forum dernièrement c'est que j'avais perdu mon mot de passe suite à mon changement d'ordi :S

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le tuto ;D

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le tuto, mais est-il possible de mettre une ligne de commentaire comme ceci ?

#La ligne suivante sert à montrer un exempleexemple: "Regardez en haut"

Merci de me répondre ;)

 

Cordialement

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le tuto, mais est-il possible de mettre une ligne de commentaire comme ceci ?

#La ligne suivante sert à montrer un exempleexemple: "Regardez en haut"

Merci de me répondre ;)

 

Cordialement

Oui ! Les commentaires sont possibles en ajoutant le signe # au début d'une ligne.

Cependant on ne peut pas ajouter/supprimer/modifier des commentaires avec l'API de bukkit, il faudra que tu écrive toi-même dans le fichier.

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu pourrais faire tuto sur comment le relier a commands ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ton message ne veut rien dire... Relis toi sérieux avant de poster un message si tu ne veux pas passer pour un kikoo, c'est déjà bien avancé...

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu pourrais faire tuto sur comment le relier a commands ?

Question claire, réponse encore plus claire:

Non moi pas faire lier command :D

 

Plus sérieusement, on ne "relie" pas la config et les commandes :blink:

Regarde tuto sur comment faire un plugin déjà ^^

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Question claire, réponse encore plus claire:

Non moi pas faire lier command :D

Plus sérieusement, on ne "relie" pas la config et les commandes :blink:

Regarde tuto sur comment faire un plugin déjà ^^

pour etre honnete je n'est jamais craument appris a cree plugin et pourtant j'y arrive mon probleme est les commands

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.