Dans ce tutoriel je vais faire une explication sur tout ce qui concerne les "localization"
Il s'agit de tout ce qui gère le nom en jeu.
Dans mes premiers tutoriels, je vous ai apprit à utilisé la méthode suivante :
Code (java):
LanguageRegistry.addName(Bloc_tutoriel, "Bloc Tutoriel");
Il existe d'autres façons pour nommer nos blocs/items/mobs, c'est ce que nous allons voir ici.
1. Récupérer le nom non localisé :
Le nom non localisé est défini par la méthode suivante : .setUnlocalizedName("monbloc");
Il ne s'agit pas du nom complet, car si on regarde dans la class block.java on peut voir ça :
Code (java):
public String getLocalizedName
()
{
return StatCollector.
translateToLocal(this.
getUnlocalizedName() + ".name");
}
public String getUnlocalizedName
()
{
return "tile." + this.
unlocalizedName;
}
Donc le nom non localisé de mon bloc est tile.monbloc.name
Même principe pour les items, c'est item.monitem.name
Pour les mobs, entity.nomdumob.name et pour les tables créative : itemGroup.nomdelatable
Et sinon pour les items et les blocs, vous pouvez toujours les gives avec /give p <touche tab pour compléter le nom du joueur> id
pour les items il faut additionné 256 à l'id dans le code
Exemple :
Maintenant vous savez comment récupérer le nom non localisé, nous allons donc voir à quoi il sert
2. Les méthodes pour enregistrer un nom :
Le plus simple quand on débute reste d'utiliser
Code (java):
LanguageRegistry.addName(MonBloc, "Mon Bloc");
Mais cette méthode ne supporte pas les différents langage, en fait le revient à faire :
Code (java):
LanguageRegistry.instance().addNameForObject(MonBloc, "en_US", "Mon Bloc");
Avec cette méthode, on peut enregistrer pour plusieurs langue :
Code (java):
LanguageRegistry.instance().addNameForObject(MonBloc, "en_US", "My Block");
Code (java):
LanguageRegistry.instance().addNameForObject(MonBloc, "fr_FR", "Mon Bloc");
etc ...
L'autre méthode est d'utiliser
Code (java):
LanguageRegistry.instance().addStringLocalization(tile.monbloc.name, "en_US", "My Block");
Code (java):
LanguageRegistry.instance().addStringLocalization(tile.monbloc.name, "fr_FR", "Mon Bloc");
Cette méthode localise le nom, il faut donc passer par le nom non localisé, d'où le 1).
Du coup vous allez dire que le 1) est inutile puisque la fonction addNameForObject n'a pas besoin du nom non localisé. Nous verrons plus tard que le nom non localisé est très utile avec les metadata, habituez-vous donc à l'utilisez.
De plus il y a un autre avantage, j'en viens dans le 3).
3. Un fichier de localization externe :
Et oui, vous n’êtes pas obliger de mettre tout les noms dans les codes, il est possible de le faire depuis un fichier externe, c'est très avantageux pour les gens qui souhaite contribuer à la traduction de votre mods, plus simple pour l'encodage (problème d'accent) et ça évite d'avoir 50
LanguageRegistry.instance().addStringLocalization(tile.monbloc.name, "en_US", "My Block");
car à force d'enregistrer des blocs, des items, des mobs, ça prend beaucoup de place, surtout si vous avez plusieurs langue supporté
Il existe deux méthodes, une première qui importe le fichier depuis l'archive du mods, et l'autre depuis un URL ! Il est donc possible de faire charger les noms depuis un ftp (ou dropbox) et vous pouvez donc changer à tout moment les noms sans mise à jour du mod.
Code (java):
LanguageRegistry.instance().loadLocalization("/mods/nomdumods/lang/en_US.lang", "en_US", false);
Dans votre dossier mcp/src/minecraft/mods/nomdumods, créez un dossier lang en plus du dossier textures, puis ajoutez un fichier en_US avec l’extension .lang
Cette extension n'est pas obligatoire, vous pouvez mettre autre chose. Pareil pour le chemin du fichier, vous pouvez le mettre ailleurs.
Pour le false, c'est une boolean pour savoir si le fichier est du type xml, je vous conseil de laisser en false.
Pour le fichier, je vous conseil d'utiliser notepad++, et pensez à bien mettre l'encodage en UTF-8 sans bom :
Si vous avez commencé en ANSI, vous pouvez toujours convertir :)
Utilisez # pour faire des commentaires. Ensuite pour définir les noms, il faut juste mettre <nom non localisé> = <nom localisé>
Exemple :
https://github.com/MCNanotech/BetterEnd/blob/master/src/minecraft/mods/BetterEnd/lang/en_US.lang
Si vous avez votre fichier en xml (avec la boolean sur true) ça donne quelque chose comme ça :
https://github.com/pahimar/Equivalent-Exchange-3/blob/master/resources/mods/ee3/lang/en_US.xml
Pour charger le fichier depuis un FTP, c'est la même fonction, remplacez juste le chemin du fichier par l'url
Voila fin du tutoriel.