Bonjour à tous !
Je cherche a récupérer un enchantement depuis un fichier en .yml et ensuite l'attribuer à un item. Concernant le .yml, je n'ai pas réussi à trouver le moyen de récupérer le type d'enchantement et à l'ajouter à un objet de type Enchantment (normal String et Enchantment ne sont pas les mêmes objets).
Mon fichiers .yml se présente comme ceci :
Je voudrais donc que sur l'item en question, ces deux enchantements lui soient attribués.
Les problèmes maintenant :
Commençons par le commencement : la lecture du String.
En effet ces éléments sont séparés par des , et des ;. J'ai donc trouvé ceci : https://openclassrooms.com/forum/sujet/lecture-d-un-fichier-avec-separateurs-13075 afin de lire chaque élément séparément. Puis après je me suis dit "tant qu'à faire, ce n'est que de la lecture de String, autant mettre une , entre chaque enchantement aussi" ce qui aurait fais que les valeur paires du tableau aurait été les enchantement et les valeurs impaires les puissances de l'enchantement (voir le lien pour comprendre cette histoire de tableau, c'est important pour la suite). Bon et dans un élan de motivation je me suis dit "mettons tous cela dans une Map, ce sera rangé et propre".
Donc pour la lecture du fichier j'en suis ici. Je vous demande déjà votre avis sur la façon de procéder et si vous avez mieux, bah je prends
Bon, viens maintenant la deuxième partie : relier le String à l'Enchantment.
Mon tableau (ou ma Map) contiennent donc le type d'enchante ainsi que la valeur souhaitée.
En parallèle, j'ai récupérer les meta de mon item afin d'y ajouter les enchantes. J'ai donc d'une part les tableaux avec mes enchantes et d'autre part mon meta pour ajouter mes enchantes.
Et soudain, c'est le drame. Comment je peux obtenir quelque chose de la forme :
Eclipse me cri dessus et il a parfaitement raison. Donc comment puis-je utiliser la syntaxe
Voilà, j'espère avoir été assez clair sinon bah d'autres explication viendrons compléter le bousin.
Ah oui, je souhaite pouvoir attribuer X enchantement à mes items. Dans la mesure du possible (sinon on fera avec hein) je voudrais ne pas avoir à faire ENCHANTE_1=....ENCHANTE_2=... etc... Je voudrais que le plugin détecte tout seul le nombre d'enchante (d'où l'utilisation de ce système pour la lecture des enchantes).
Voilà !
Je vous met le bout de code à la suite
Les seuls éléments qui sont nommés dans le .yml, ce sont les pièces d'armure (pour se simplifier la vie), d'où ce switch un peu différent.
Et un exemple de mon .yml :
Voilà je pense avoir fais le tour
Merci d'avance,
AlexFatta
PS : je viens d'avoir l'idée en rédigeant ce message, je soumet l'idée mais je ne sais pas si c'est opti ou même propre, mais ca fonctionnerai avec un switch pour les enchantes ? Même si ça fais quand même un très long switch...
Je cherche a récupérer un enchantement depuis un fichier en .yml et ensuite l'attribuer à un item. Concernant le .yml, je n'ai pas réussi à trouver le moyen de récupérer le type d'enchantement et à l'ajouter à un objet de type Enchantment (normal String et Enchantment ne sont pas les mêmes objets).
Mon fichiers .yml se présente comme ceci :
Code:
enchants: PROTECTION_ENVIRONMENTAL, 1; PROTECTION_PROJECTILE, 2
Les problèmes maintenant :
Commençons par le commencement : la lecture du String.
En effet ces éléments sont séparés par des , et des ;. J'ai donc trouvé ceci : https://openclassrooms.com/forum/sujet/lecture-d-un-fichier-avec-separateurs-13075 afin de lire chaque élément séparément. Puis après je me suis dit "tant qu'à faire, ce n'est que de la lecture de String, autant mettre une , entre chaque enchantement aussi" ce qui aurait fais que les valeur paires du tableau aurait été les enchantement et les valeurs impaires les puissances de l'enchantement (voir le lien pour comprendre cette histoire de tableau, c'est important pour la suite). Bon et dans un élan de motivation je me suis dit "mettons tous cela dans une Map, ce sera rangé et propre".
Donc pour la lecture du fichier j'en suis ici. Je vous demande déjà votre avis sur la façon de procéder et si vous avez mieux, bah je prends

Bon, viens maintenant la deuxième partie : relier le String à l'Enchantment.
Mon tableau (ou ma Map) contiennent donc le type d'enchante ainsi que la valeur souhaitée.
En parallèle, j'ai récupérer les meta de mon item afin d'y ajouter les enchantes. J'ai donc d'une part les tableaux avec mes enchantes et d'autre part mon meta pour ajouter mes enchantes.
Et soudain, c'est le drame. Comment je peux obtenir quelque chose de la forme :
Code:
Enchantment. + monTableau[0]
Code:
meta.addEnchant(MON_ENCHANTEMENT, VALEUR, true) ?
Voilà, j'espère avoir été assez clair sinon bah d'autres explication viendrons compléter le bousin.
Ah oui, je souhaite pouvoir attribuer X enchantement à mes items. Dans la mesure du possible (sinon on fera avec hein) je voudrais ne pas avoir à faire ENCHANTE_1=....ENCHANTE_2=... etc... Je voudrais que le plugin détecte tout seul le nombre d'enchante (d'où l'utilisation de ce système pour la lecture des enchantes).
Voilà !

Je vous met le bout de code à la suite

Code:
public static void loadKit() {
for (String kitName : FileManager.getKits().getConfigurationSection("kits").getValues(false).keySet()) {
for (String elementName : FileManager.getKits().getConfigurationSection("kits." + kitName).getValues(false).keySet()) {
ItemStack element = null;
String itemName = FileManager.getKits().getString("kits." + kitName + "." + elementName + ".name").replace('&', '§');
switch (elementName) {
case "Helmet": case "Chestplate": case "Leggings": case "Boots":
ItemStack armorPiece = new ItemStack(FileManager.getKits().getItemStack("kits." + kitName + "." + elementName + ".type"));
element = armorPiece;
break;
default:
break;
}
try {
String line = FileManager.getKits().getString("kits." + kitName + "." + elementName + ".enchants");
String strPower[] = line.split(",");
HashMap<String, Integer> enchantMap = new HashMap<>();
ItemMeta meta = element.getItemMeta();
meta.setDisplayName(itemName);
meta.addEnchant((Enchantment) strPower[0], strPower[1], true);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
}
Les seuls éléments qui sont nommés dans le .yml, ce sont les pièces d'armure (pour se simplifier la vie), d'où ce switch un peu différent.
Et un exemple de mon .yml :
Code:
kits:
Example_of_kits:
Helmet:
name: 'Helmet'
type: IRON_HELMET
enchants: PROTECTION_ENVIRONMENTAL, 1; PROTECTION_PROJECTILE, 2
slot (Only if this element IS NOT an armor piece || number between 0 and 35): 0
number (consumables like food or potions only): 0
Voilà je pense avoir fais le tour

Merci d'avance,

AlexFatta
PS : je viens d'avoir l'idée en rédigeant ce message, je soumet l'idée mais je ne sais pas si c'est opti ou même propre, mais ca fonctionnerai avec un switch pour les enchantes ? Même si ça fais quand même un très long switch...