Profiles
Présentation
Profiles donne à chaque joueur plusieurs personnages indépendants sur un même compte. Changer de profil échange l'inventaire, l'ender chest, l'expérience, la santé et la faim du joueur, ainsi que ses facts TypeWriter : la progression des quêtes, les déblocages et les compteurs sont donc distincts pour chaque personnage. D'autres extensions BTC, comme BTC Sky, rattachent leurs propres données au profil actif.
Les profils sont créés et choisis depuis un menu que vous concevez dans le panneau web. Un serveur peut obliger les joueurs à choisir un profil avant de pouvoir se déplacer, construire, combattre ou discuter. Les données sont stockées dans une base de données lorsque le pont MySQL est activé, ce qui rend les profils disponibles sur tous les serveurs d'un réseau, et dans des fichiers sinon.
Le système est lié au mode de jeu du serveur (mysql.game-mode.current) : un joueur a une liste de profils distincte dans chaque mode de jeu.
Fonctionnalités
- Personnages distincts — inventaire, armure, seconde main, ender chest, niveau, expérience, santé, faim et saturation par profil.
- État d'histoire distinct — les facts TypeWriter sont sauvegardés lors du changement et restaurés pour le profil.
- Menu des profils — une GUI avec un emplacement par profil, des modèles pour les emplacements actifs, inactifs, libres et verrouillés.
- Sélection obligatoire — tant qu'aucun profil n'est actif, le joueur ne peut ni se déplacer, ni interagir, ni casser, ni poser, ni jeter, ni combattre, ni discuter.
- Solo et coop — un profil est créé en solo ou en coop (île partagée BTC Sky), et un mode de jeu sans coop saute la question.
- Limites — un maximum par défaut et des limites plus élevées par permission.
- Protection du changement — un cooldown entre deux changements et un événement que d'autres extensions peuvent annuler.
- Entrées — actions pour ouvrir le menu, créer, changer, renommer, supprimer et sauvegarder, facts sur l'état du profil, et événements.
- Inter-serveurs — les profils et leurs données sont partagés via le pont MySQL.
- Placeholders — nom, identifiant, nombre, limites et détails par profil pour les menus et les HUD.
Installation
- Installez l'extension GUI, qui dessine le menu. L'extension Basic est déclarée comme dépendance.
- Recommandé : installez l'extension MySQL et activez-la (
mysql.enabled: true). Sans elle, les profils sont stockés dans des fichiers et ne sont pas partagés entre les serveurs. - Placez le JAR de Profiles dans
plugins/Typewriter/extensions/et redémarrez le serveur. - Modifiez la section
profilesdeplugins/Typewriter/mysql/config.yml, voir Configuration. Profiles lit ses paramètres dans le fichier de configuration de l'extension MySQL même lorsque vous n'utilisez pas de base de données. - Créez les entrées de menu décrites dans Premiers pas.
Premiers pas
Mettez en place une sélection de profil que les nouveaux joueurs doivent terminer :
- Dans le panneau web de TypeWriter, ouvrez une page et ajoutez une entrée Profile Menu Config.
/profileouvre la première trouvée, et ne fait rien s'il n'en existe aucune. - Définissez
inventoryTitle,inventoryRowsetguiType. Construisez la disposition danslayoutPoolet définissezmainLayoutId. Voir les guides GUI. - Placez des objets avec
buttonPrefixprofile_button:etbuttonTypePROFILE_SLOTlà où les profils doivent apparaître. Chaque marqueur affiche un profil, lus de gauche à droite puis de haut en bas. Les emplacements situés sous la limite du joueur qui ne contiennent aucun profil affichentcreateProfileTemplate, les emplacements au-delà de la limite affichentmaxProfilesTemplate. - Définissez
defaultMaxProfileset, si besoin,permissionLimits. - Créez les deux pages GUI utilisées pour la création, sous forme d'entrées Open GUI avec les identifiants
profile_create_chooser(un choix Solo ou Coop) et, pour les modes de jeu sans coop,profile_create_solo. Un bouton de ces pages exécuteprofile create soloouprofile create coop, et pour les modes solo uniquementprofile createseul. - Dans
plugins/Typewriter/mysql/config.yml, vérifiezprofiles.force-profile-selection(truepar défaut) etprofiles.coop-supported. - Publiez, connectez-vous au serveur, puis choisissez ou créez un profil.
Utilisez Switch Profile Action ou Open Profile Menu Action depuis des PNJ et des objets. Réagissez aux changements effectués par l'action de changement ou par des commandes saisies avec l'Profile Switched Event.
Utilisez les facts Profile Count Fact et Is Profile Active Fact dans des critères. Par exemple, n'affichez un bouton « créer un profil » que tant que Can Create Profile Fact vaut 1.
Fonctionnement
Lors d'un changement, l'extension vérifie le cooldown, puis déclenche un événement de pré-changement annulable afin qu'un mode de jeu puisse refuser (par exemple pendant une guerre ou un mini-jeu). Elle capture ensuite l'état actuel du joueur, l'écrit dans le dépôt, efface les facts TypeWriter et l'inventaire du joueur, puis restaure les données du profil cible. L'état du profil actif est aussi sauvegardé lorsque le joueur quitte le serveur.
Ce qui est sauvegardé dépend de la configuration : inventaire et ender chest (save-inventory, save-ender-chest) et statistiques Minecraft (save-statistics, désactivé par défaut à cause de sa taille). Le niveau, l'expérience, la santé, la faim et les facts TypeWriter sont toujours sauvegardés.
Comme les facts sont échangés, tout ce qui est stocké dans un fact appartient au profil. Les données des autres extensions suivent leur propre profile-mode dans la configuration MySQL : les données per-profile sont conservées séparément pour chaque profil, les données shared sont communes à tous les profils.
Configuration
Profiles n'a pas de fichier de configuration propre. Ses paramètres se trouvent dans la section profiles de plugins/Typewriter/mysql/config.yml, créé par l'extension MySQL.
| Clé | Valeur par défaut dans le fichier fourni | Signification |
|---|---|---|
profiles.enabled | true | Active le système de profils. |
profiles.max-profiles | 2 | Nombre maximal de profils par joueur lorsqu'aucune entrée Profile Menu Config n'existe. Le defaultMaxProfiles de l'entrée le remplace. |
profiles.default-profile-name | Principal | Nom du profil automatique. |
profiles.save-statistics | true | Sauvegarde les statistiques Minecraft par profil. Utilise beaucoup de stockage. |
profiles.save-inventory | true | Échange l'inventaire par profil. |
profiles.save-ender-chest | true | Échange l'ender chest par profil. |
profiles.require-permission | false | Exige typewriter.profiles.create pour créer un profil. |
profiles.auto-create-default | true | Crée un profil par défaut à la première connexion. Ne fonctionne que lorsque coop-supported vaut false. |
profiles.force-profile-selection | true | Bloque le joueur tant qu'aucun profil n'est actif. |
profiles.switch-cooldown-seconds | 60 | Délai minimal entre deux changements d'un joueur. 0 le désactive. |
profiles.coop-supported | true | Indique si ce mode de jeu a des profils coop. Lorsque false, la question Solo ou Coop est sautée et chaque profil est solo. |
profiles.creation-menu-entry-id | vide | Identifiant de la page GUI ouverte pour créer un profil. Vide signifie profile_create_chooser lorsque la coop est prise en charge et profile_create_solo sinon. |
Les valeurs ci-dessus sont celles du fichier fourni. Les valeurs de repli intégrées diffèrent lorsqu'une clé est absente (max-profiles 5, save-statistics true, auto-create-default false) ; conservez donc les clés dans votre fichier.
Stockage. Avec mysql.enabled: true et profiles.enabled: true, les profils sont stockés dans la table typewriter_profiles. Sinon, ils sont stockés comme assets dans profiles/<game mode>/<player uuid>.json. Les profils sauvegardés dans l'ancien artifact Profile Storage Artifact sont copiés automatiquement vers le nouveau stockage au démarrage.
Menus
L'entrée Profile Menu Config décrit le menu. Un clic sur un profil y bascule, Maj + clic gauche le supprime (après un écran de confirmation, sauf si deleteConfirmation est désactivé), et un clic sur un emplacement libre ouvre la page de création. La création d'un profil demande son nom dans une enclume. {profile_name}, {profile_id}, {created_date}, {last_used}, {level}, {exp}, {health}, {food}, {profile_count} et {max_profiles} peuvent être utilisés dans les titres, les noms et le lore.
Les objets-boutons avec buttonPrefix profile_button: prennent en charge PROFILE_SLOT (un profil), ainsi que les marqueurs INFO et CLOSE, qui exécutent profile info et gui:close.
Les emplacements peuvent exécuter profile open, profile select <id>, profile create solo|coop et profile delete <id>, en tant que joueur qui clique.
Les textes par défaut du menu, des messages et du message de cooldown sont en français. Modifiez-les dans l'entrée de menu.
Commandes
Toutes les commandes nécessitent profiles.use. Alias : /profil, /profiles.
| Commande | Description |
|---|---|
/profile | Ouvre le menu des profils. |
/profile menu | Ouvre le menu des profils. |
/profile select <id> | Bascule vers un profil. |
/profile create solo ou coop | Crée et active un profil ; le nom est demandé dans une enclume. Sans mode, uniquement pour les modes de jeu sans coop. |
/profile delete <id> [confirm] | Supprime un profil qui n'est pas actif. Ouvre d'abord l'écran de confirmation si deleteConfirmation est activé, sauf si confirm est donné. |
/profile admin list <player> | Liste les profils d'un joueur en ligne (nécessite profiles.admin). |
/profile admin create <player> <name> | Crée un profil solo pour un joueur. |
/profile admin delete <player> <id> | Supprime un profil d'un joueur. |
/profile admin switch <player> <id> | Fait basculer un joueur vers un profil. |
/profile admin rename <player> <id> <name> | Renomme un profil. |
/profile headless list, select <id>, create <name> | Gérez vos propres profils sans menu (nécessite profiles.headless). |
Un écouteur de menu traite /profile saisi par un joueur avant l'arborescence de commandes : il prend en charge select, create, delete et l'ouverture du menu, et ignore les autres. /profile admin ... et /profile headless ... fonctionnent donc de façon fiable depuis la console, ou via les alias /profil et /profiles.
Permissions
| Permission | Par défaut | Autorise |
|---|---|---|
profiles.use | Tout le monde | Les commandes /profile. |
profiles.admin | Opérateurs | /profile admin. |
profiles.headless | Personne | /profile headless, pour les clients sans écran tels que les bots de test. |
profiles.switch.bypasscooldown | Personne | Changer sans cooldown. |
typewriter.profiles.create | Personne | Créer des profils lorsque profiles.require-permission vaut true. |
Permissions de permissionLimits | À vous de choisir | Augmentent la limite de profils. La limite la plus élevée l'emporte. |
Placeholders
Balises MiniPlaceholders pour les textes MiniMessage. Une référence est une position dans la liste (chiffres, à partir de 0) ou un identifiant de profil.
| Placeholder | Renvoie |
|---|---|
<profile_active_id>, <profile_active_name> | Identifiant et nom du profil actif. |
<profile_active> | 1 lorsqu'un profil est actif. Avec une référence, <profile_active:0> indique si ce profil est le profil actif. |
<profile_count> | Nombre de profils. |
<profile_max> | Nombre maximal de profils pour le joueur. |
<profile_can_create> | 1 lorsque le joueur peut créer un autre profil. |
<profile_remaining> | Nombre de profils encore disponibles. |
<profile_friend_count> | Nombre d'amis, 0 sans l'extension Friend. |
<profile_enabled> | 1 lorsque le système est activé. |
<profile_name:ref>, <profile_id:ref> | Nom et identifiant d'un profil. |
<profile_created:ref>, <profile_last_used:ref> | Dates au format dd/MM/yyyy HH:mm. |
<profile_created_timestamp:ref>, <profile_last_used_timestamp:ref> | Millisecondes epoch. |
<profile_level:ref>, <profile_exp:ref> | Niveau, et progression de l'expérience en pourcentage. |
<profile_health:ref>, <profile_food:ref> | Santé et niveau de faim sauvegardés. |
Entrées
20 entrées, générées depuis la source de l'extension.
Actions6
- Create Profile ActionCreates a new profile for the player
- Delete Profile ActionDeletes a specific profile
- Open Profile Menu ActionOpens the profile selection menu for the player
- Rename Profile ActionRenames a specific profile
- Save Profile ActionSaves the current profile state
- Switch Profile ActionSwitches the player to a specific profile
Événements5
- Profile Created EventTriggered when a player creates a new profile
- Profile Deleted EventTriggered when a player deletes a profile
- Profile Loaded EventTriggered when a player's profile is loaded on join
- Profile Saved EventTriggered when a player's profile is saved
- Profile Switched EventTriggered when a player switches profiles
Faits7
- Can Create Profile FactReturns 1 if player can create more profiles, 0 otherwise
- Has Active Profile FactReturns 1 if player has an active profile, 0 otherwise
- Is Profile Active FactReturns 1 if the specified profile is active, 0 otherwise
- Max Profiles FactReturns the maximum number of profiles allowed per player
- Profile Coop Enabled FactReturns 1 if the active profile was created as a coop profile
- Profile Count FactReturns the number of profiles a player has
- Profiles Enabled FactReturns 1 if the profile system is enabled, 0 otherwise
Artefacts1
- Profile Storage ArtifactStores player profiles with separate inventories and data
Manifestes1
- Profile Menu ConfigConfiguration for the profile selection menu
Dépannage
/profile ne fait rien. Il n'existe aucune entrée Profile Menu Config. Créez-en une et publiez-la.
Les nouveaux joueurs sont figés et ne peuvent pas discuter. profiles.force-profile-selection vaut true et aucun profil n'est actif. Le joueur est envoyé vers la page de création après sa connexion ; assurez-vous que l'entrée GUI profile_create_chooser (ou profile_create_solo, ou votre creation-menu-entry-id) existe. Définissez l'option sur false pour désactiver le verrou.
« Choisissez d'abord Solo ou Coop dans le menu des profils. » Le joueur a essayé une commande alors qu'il était bloqué. Seuls /profile ... et la commande de la page de création sont autorisés tant qu'aucun profil n'est actif.
« Vous devez attendre N s avant de changer à nouveau de profil. » Le cooldown de changement est en cours. Diminuez profiles.switch-cooldown-seconds ou accordez profiles.switch.bypasscooldown.
Aucun profil par défaut n'est créé à la première connexion. auto-create-default ne fonctionne que lorsque coop-supported vaut false. Avec la coop, un joueur doit choisir Solo ou Coop, et le journal indique « No implicit profile was created; disable the setting. »
Les profils diffèrent d'un serveur à l'autre. L'extension MySQL doit être activée (mysql.enabled: true) sur chaque serveur, avec la même base de données et le même mode de jeu. Sans elle, les profils sont dans des fichiers locaux. Si MySQL est activé mais que la source de données est introuvable, le journal indique « MySQL enabled for profiles but DataSource not found. Falling back to JSON. »
Des joueurs perdent des objets après un changement. Vérifiez save-inventory et save-ender-chest. Lorsqu'ils valent false, l'inventaire n'est ni échangé ni vidé : les objets sont donc partagés entre les profils.
Un changement est refusé avec un message. Une autre extension l'a annulé via l'événement de pré-changement, par exemple pendant un combat ou un mini-jeu. Le message provient de cette extension.