Catalog Types

Une grande partie de l’API de données se compose de valeurs spéciales avec une signification particulière. Dans les versions précédentes de Minecraft, celles-ci ont été des nombres comme 1 qui signifiaient quelque chose de spécifique danas un contexte donné, par exemple une simple pierre dans la commande /give. De versions en versions, Minecraft s’est éloigné de ces nombres magiques et s’est déplacé vers une manière plus déclarative à l’aide d’identificateurs (namespaced) comme minecraft:stone. Cependant cela a amené deux grands problèmes avec ces valeurs :

  1. Comment je les rends persistantes et les recharge ?

  2. Quelles valeurs existent ?

À cause de cela, Sponge a introduit une nouvelle classe de données : CatalogTypes.

Les CatalogTypes fournissent deux méthodes qui les rendent très polyvalents.

D’abord, la méthode CatalogType#getId() qui fournit un accès facile à un identificateur unique (à l’intérieur de ce type de données) qui peut être utilisé pour le sauvegarder vers un fichier de configuration et le récupérer en utilisant la méthode GameRegistry#getType(Class, String). En soit, vous n’avez pas à faire cela vous-même, vous pouvez compter sur la sérialisation de configuration de Sponge pour le faire à votre place.

Certains ids ne sont pas vraiment lisibles par les humains, donc il y a une autre méthode pour les CatalogTypes qui essaie de retourner un nom lisible par les humains. Vous pouvez également vérifier si votre type est Translatable, ce qui vous donnera un bon nom à montrer à vos joueurs en utilisant leur langue.

GameRegistry

Le GameRegistry vous donne accès à toutes les variantes des CatalogTypes en utilisant la méthode GameRegistry#getAllOf(Class). Il vous offre diverses autres façons de récupérer un CatalogType et des classes comme des builders pour la plupart des classes qui contiennent des classes de données. Vous pouvez également récupérer des registres plus spécifiques à partir d’ici, comme le VillagerRegistry le registre des recettes.

Utilisation dans les Commandes

Les CatalogTypes peuvent être facilement utilisés dans les Commandes de Plugin en utilisant le catalogedElement qui va automatiquemeent supporter l’auto-complétion pour toutes les variantes possibles d’un type donné. Lire plus à ce sujet dans la section Analyse des Arguments.

Les Classes Catalog

Parfois, nous voulons simplement référencer une entrée CatalogType dans notre code sans réeellement le récupérer depuis le registre; c’est généralement le cas pour les valeurs par défaut. Pour simplifier ces cas d’utilisation, il y a des classes catalogues additionnelles qui contiennent des références statiques vers les types qui sont soit fournis par Minecraft lui-même ou Sponge. Vous pouvez trouver ces classes en suivant l’annotation CatalogedBy dans votre classe CatalogType. Si l’annotation est manquante sur cette classe, vérifiez également les classes filles et mères. Si la classe a trop de variantes ou que les variantes peuvent être ajoutées et supprimées lors de l’exécution, alors il n’y aura pas de classe catalogue. Une liste de tous les catalog types natifs peut être trouvée dans CatalogTypes.

Avertissement

N’utilisez pas ces références statiques à l’intérieur de vos propres champs statiques, parce que les références sont seulement initialisés pendant le démarrage du jeu et peuvent donc encore contenir des fausses valeurs. Utiliser ces fausses valeurs causera des exceptions dont l’origine pourrait être difficile à tracer.