SarkiFramework
Si SarkiAPI est indispensable, SarkiFramework l'est tout autant. De même, l'ensemble de l'API est documentée avec de la JavaDoc et toutes les informations sont disponibles dedans.
Plugin Providers
Le paradigme imposé par SarkiFramework se base sur un système de provider. C'est à dire que chaque composant utilisant SarkiFramework se doit d'enregistrer une unique instance implémentant l'interface PluginProvider :
public interface SarkiFramework extends BukkitPluginProvider // BukkitPluginProvider hérite de PluginProvider
{
static SarkiFramework framework()
{
return PluginProviders.getProvider(SarkiFramework.class);
}
// méthodes accessibles de "l'extérieur"
}
PluginProviders.setProvider(SarkiFramework.class, this); // enregistrementSarkiFramework.framework().qqchose(); // accèsCommand Manager
SarkiFramework vient avec quelque chsoe d'assez utile : un Command Manager. Vous pouvez facilement créér une commande mère avec plusieurs sous commandes en étendant simplement votre classe de commande avec SarkiCommand et en l'enregistrant avec la classe CommandManager. Une sous commande help est automatiquement créé pour vous.
Intégration SlimeWorldManager
SarkiFramework fournit également une intégration avec SlimeWorldManager qui est utilisé dans tous les mini-jeux afin de réduire les coûts de chargement et de déchargement de monde, d'avoir des chargements rapides et surtout des serveurs supportant plusieurs parties en même temps. Je vous invite à consulter l'interface MapType, l'interface WorldManager dont une instance est disponible depuis SarkiFramework.
Voici un exemple de gestion d'un monde Slime pour une partie (issu du plugin Infected) :
Lecture de la configuration et enregistrement dans SarkiFramework :
Création du monde :
Déchargement du monde comme pour un monde vanilla :
Gestion du joueur
La classe PlayerExtension est une réimplémentation de l'interface Player permettant aux plugins de l'étendre et d'ainsi ajouter leurs propres attributs, méthodes etc directement sur l'objet du joueur. Cette classe se couple avec la classe PlayerManager qui permet d'enregistrer directement les joueurs dans une Map depuis leur objet Player géré par Bukkit. N'hésitez pas à consulter les plugins existant pour des exemples d'utilisation de ces deux classes (c'est plutôt trivial).
Inventaires
SarkiFramework possède un système d'inventaire custom. Il a ses avantages et ses défauts, utilisez le si vous en avez besoin, mais n'hésitez pas à procéder autrement si il ne répond pas à vos besoins. Exemples d'utilisations présents dans certains plugins de mini-jeu.
Items
SarkiFramework vous propose d'enregistrer vos items custom via la classe ItemsService. Vous retrouverez comme dans n'importe quel plugin une classe ItemBuilder si vous en avez besoin.
Langue
Le système d'internationalisation (I18n) de SarkiFramework est sans doute l'une de ses plus importantes fonctionnalités. Il permet de choisir la bonne traduction de message en fonction de la langue du joueur. Voici la procédure à suivre pour l'utiliser :
Dans vos ressources, vous devez avoir un dossier lang, dans ce dossier, vous y placerez vos fichiers d'internationalisation au format YAML. Vous devez avoir un fichier par langue. Ils doivent être nommés en fonction du "lang code" indiqué dans l'énumération Language dans SarkiAPI. Par exemple, pour ENGLISH, c'est en-US, donc votre fichier pour l'anglais se nommera en-US.yml.
Vous devez ensuite indiquer à SarkiFramework que vous souhaitez utiliser le système pour votre plugin.
À savoir que, depuis SarkiFramework 1.6.3, il réalise automatiquement la migration des messages entre les différentes versions de votre plugin (c'est-à-dire que les clés qui n'existent plus sont supprimées et les nouvelles ajoutées tout en conservant les modifications effectuées aux messages toujours existants).
Vous pouvez consulter les différents mini-jeux existant (et même le plugin Template !) pour avoir un exemple d'énumération d'internationalisation. Vous noterez la différence entre implémenter LanguageMessage et MutableLanguageMessage. Le deuxième ajoute la possibilité d'ajouter des clés variables suivant un même pattern. Exemple courant :
Dans votre énumération, vous aurez cette entrée :
Cela vous évite d'avoir plusieurs entrées ayant le même format.
Pour l'utilisation de MessageAdapter, je recommande de consulter les exemples d'utilisation dans les connectors pour la boutique.
SarkiFramework fournit une énumération FrameworkMessagecontenant des messages traduits directement dans le plugin et utilisable par tout plugin. Cela permet d'éviter la redondance des messages.
Utilitaires
Vous trouverez notamment la classe ChatUtils contenant des fonctions pour convertir les & en § notamment.
Vous trouverez aussi la classe TimeUtils pour avoir le temps formaté de manière uniforme entre les plugins. À utiliser sans modération.
Last updated