GroupeZ Docs
Configurations

Donnees joueur

Stocker et recuperer des donnees specifiques aux joueurs

zMenu inclut un systeme de donnees joueur integre qui vous permet de stocker et recuperer des valeurs specifiques a chaque joueur. C'est parfait pour suivre la progression, creer des bascules, stocker des statistiques et plus encore.

Comment ca fonctionne

Les donnees joueur sont stockees dans une base de donnees (SQLite par defaut, MySQL/MariaDB en option) et persistent entre les redemarrages du serveur. Chaque joueur a son propre ensemble de paires cle-valeur.

Acceder aux donnees joueur

Placeholder

Utilisez le placeholder %zmenu_player_value_<cle>% :

item:
  name: "&6Pieces : %zmenu_player_value_coins%"
  lore:
    - "&7Kills : %zmenu_player_value_kills%"
    - "&7Morts : %zmenu_player_value_deaths%"

Commandes

# Definir une valeur
/zm players set <joueur> <cle> <valeur>

# Ajouter a une valeur (numerique)
/zm players add <joueur> <cle> <valeur>

# Obtenir une valeur
/zm players get <joueur> <cle>

# Supprimer une cle
/zm players remove <joueur> <cle>

# Supprimer une cle de TOUS les joueurs
/zm players removeall <cle>

# Lister toutes les cles pour un joueur
/zm players keys <joueur>

Modifier les donnees avec des actions

L'action Data

actions:
  - type: data
    action: SET      # SET, ADD, SUBTRACT, MULTIPLY, DIVIDE, REMOVE
    key: "coins"
    value: "100"
    math: true       # Activer les expressions mathematiques

Actions disponibles

ActionDescriptionExemple
SETDefinir a une valeur specifiquevalue: "100"
ADDAjouter a la valeur actuellevalue: "50"
SUBTRACTSoustraire de la valeur actuellevalue: "25"
MULTIPLYMultiplier la valeur actuellevalue: "2"
DIVIDEDiviser la valeur actuellevalue: "2"
REMOVESupprimer entierement la cle-

Expressions mathematiques

Activez les maths avec math: true :

actions:
  - type: data
    action: SET
    key: "total"
    value: "%zmenu_player_value_base%*1.5+100"
    math: true

Exemples

Systeme de pieces/monnaie

# Afficher les pieces
items:
  coin-display:
    slot: 4
    item:
      material: GOLD_NUGGET
      name: "&6&lVos Pieces"
      lore:
        - "&7Solde : &e%zmenu_player_value_coins%"

  # Bouton ajouter des pieces
  add-coins:
    slot: 11
    item:
      material: GOLD_INGOT
      name: "&a&l+100 Pieces"
    actions:
      - type: data
        action: ADD
        key: "coins"
        value: "100"
      - type: message
        messages:
          - "&a+100 pieces !"
      - type: refresh

  # Depenser des pieces
  spend-coins:
    slot: 15
    item:
      material: DIAMOND
      name: "&b&lAcheter Diamant"
      lore:
        - "&7Cout : &e50 pieces"
    click-requirement:
      achat:
        clicks:
          - ALL
        requirements:
          - type: placeholder
            value: "%zmenu_player_value_coins%"
            action: SUPERIOR_OR_EQUAL
            number: 50
            deny:
              - type: message
                messages:
                  - "&cVous avez besoin de 50 pieces !"
        success:
          - type: data
            action: SUBTRACT
            key: "coins"
            value: "50"
          - type: console-command
            commands:
              - "give %player% diamond 1"
          - type: refresh

Parametre a bascule

items:
  toggle-notifications:
    type: SWITCH
    slot: 13
    placeholder: "%zmenu_player_value_notifications%"
    buttons:
      "true":
        item:
          material: LIME_DYE
          name: "&a&lNotifications : ON"
          lore:
            - "&7Cliquez pour desactiver"
        actions:
          - type: data
            action: SET
            key: "notifications"
            value: "false"
          - type: refresh

      "false":
        item:
          material: GRAY_DYE
          name: "&7&lNotifications : OFF"
          lore:
            - "&7Cliquez pour activer"
        actions:
          - type: data
            action: SET
            key: "notifications"
            value: "true"
          - type: refresh

    default:
      item:
        material: LIME_DYE
        name: "&a&lNotifications : ON"
      actions:
        - type: data
          action: SET
          key: "notifications"
          value: "false"
        - type: refresh

Systeme de recompense quotidienne

items:
  # Systeme de recompense quotidienne
  daily-reward:
    slot: 22
    item:
      material: CHEST
      name: "&e&lRecompense quotidienne"
      lore:
        - "&7Reclamez votre recompense quotidienne !"
        - ""
        - "&7Derniere reclamation : &f%zmenu_player_value_last_daily%"
    click-requirement:
      recuperer:
        clicks:
          - ALL
        requirements:
          - type: placeholder
            value: "%zmenu_math_{zmenu_time_unix_timestamp}-{zmenu_player_value_last_daily}%"
            action: SUPERIOR_OR_EQUAL
            number: 86400  # 24 heures en secondes
            deny:
              - type: message
                messages:
                  - "&cVous avez deja reclame la recompense d'aujourd'hui !"
        success:
          - type: data
            action: SET
            key: "last_daily"
            value: "%zmenu_time_unix_timestamp%"
          - type: console-command
            commands:
              - "give %player% diamond 5"
          - type: data
            action: ADD
            key: "daily_streak"
            value: "1"
          - type: message
            messages:
              - "&aRecompense quotidienne reclamee !"
              - "&7Serie : &e%zmenu_player_value_daily_streak%"
          - type: sound
            sound: ENTITY_PLAYER_LEVELUP

Suivi de progression

items:
  quest-progress:
    slot: 13
    type: SWITCH
    placeholder: "%zmenu_player_value_quest_1_stage%"
    buttons:
      "0":
        item:
          material: PAPER
          name: "&7&lQuete : Non commencee"
          lore:
            - "&7Cliquez pour commencer"
        actions:
          - type: data
            action: SET
            key: "quest_1_stage"
            value: "1"
          - type: message
            messages:
              - "&aQuete commencee !"
          - type: refresh

      "1":
        item:
          material: WRITABLE_BOOK
          name: "&e&lQuete : En cours"
          lore:
            - "&7Etape 1 : Collecter 10 bois"

      "2":
        item:
          material: WRITABLE_BOOK
          name: "&e&lQuete : En cours"
          lore:
            - "&7Etape 2 : Fabriquer une epee"

      "complete":
        item:
          material: ENCHANTED_BOOK
          name: "&a&lQuete : Terminee !"
          lore:
            - "&7Cliquez pour reclamer la recompense"
          glow: true
        actions:
          - type: console-command
            commands:
              - "give %player% emerald 10"
          - type: data
            action: SET
            key: "quest_1_stage"
            value: "claimed"
          - type: refresh

      "claimed":
        item:
          material: BOOK
          name: "&8&lQuete : Reclamee"
          lore:
            - "&7Vous avez termine cette quete"

    default:
      item:
        material: PAPER
        name: "&7&lQuete : Non commencee"

Compteur de kills

items:
  stats-display:
    slot: 4
    item:
      material: PLAYER_HEAD
      playerHead: "%player%"
      name: "&a&lStats de %player%"
      lore:
        - "&8&m───────────────"
        - ""
        - "&7Kills : &a%zmenu_player_value_kills%"
        - "&7Morts : &c%zmenu_player_value_deaths%"
        - "&7Ratio K/D : &e%zmenu_math_{zmenu_player_value_kills}/{zmenu_player_value_deaths}%"
        - ""
        - "&8&m───────────────"

Configuration de la base de donnees

Configurez le stockage dans config.yml :

# Type de stockage : SQLITE, MYSQL, MARIADB ou NONE
storage-type: SQLITE

# Configuration de la base de donnees (pour MySQL/MariaDB)
database-configuration:
  table-prefix: "zmenu_"
  host: "localhost"
  port: 3306
  user: "username"
  password: "password"
  database: "zmenu"

Convertir JSON en SQL

Si vous utilisiez precedemment le stockage JSON :

/zm players convert

Cela migre les donnees des fichiers JSON vers la base de donnees configuree.

Valeurs par defaut

Si une cle n'existe pas, le placeholder retourne une chaine vide. Utilisez des valeurs par defaut :

# Dans les exigences, verifiez l'existence
- type: placeholder
  value: "%zmenu_player_value_coins%"
  action: SUPERIOR_OR_EQUAL
  number: 0  # Fonctionne meme si la cle n'existe pas

Ou definissez des valeurs par defaut au premier acces :

items:
  initialize:
    slot: 0
    view-requirement:
      requirements:
        - type: placeholder
          value: "%zmenu_player_value_initialized%"
          action: DIFFERENT
          target: "true"
    item:
      material: AIR
    actions:
      - type: data
        action: SET
        key: "coins"
        value: "0"
      - type: data
        action: SET
        key: "initialized"
        value: "true"
      - type: refresh

Bonnes pratiques

  1. Utilisez des cles descriptives : daily_reward_claimed et non drc
  2. Initialisez les valeurs par defaut : Definissez les valeurs initiales pour les nouveaux joueurs
  3. Utilisez les maths avec precaution : Assurez-vous que les valeurs sont numeriques pour les operations mathematiques
  4. Nettoyez les anciennes donnees : Utilisez removeall pour les cles inutilisees
  5. Sauvegardez votre base de donnees : Surtout avant les changements majeurs
  6. Documentez vos cles : Gardez une trace des donnees que vous stockez

Conventions de nommage des cles

# Bons exemples
player_coins
quest_tutorial_complete
settings_notifications
stats_kills
daily_last_claim

# Mauvais exemples
c        # Trop court
data1    # Pas descriptif
x        # Sans signification

Prochaines etapes

Sur cette page

GroupeZ MCP

La documentation dans ton IA

Le MCP permet à ton IA de chercher dans la documentation GroupeZ et de lire les exemples à jour pour t’aider à configurer tes plugins.

Lecture seule · Sans clé API côté documentation

1. Copie l’adresse du serveur

Transport : HTTP (Streamable HTTP). Authentification : aucune. Ton outil utilise son propre modèle et ses propres limites d’abonnement.

  1. Ouvre Plugins dans ChatGPT sur le web, puis + → Ajouter un serveur MCP personnalisé.
  2. Nomme-le « GroupeZ Documentation », colle l’URL ci-dessus et choisis « Aucune authentification ». Crée puis installe le plugin.
  3. Dans une conversation, tape @ et sélectionne ce plugin avant d’envoyer ta question. Si nécessaire, active search, get_page et list_pages dans ses paramètres.
Guide officiel de cet outil

3. Pose une question

Utilise le MCP GroupeZ pour m’aider à créer un inventaire zMenu. Recherche les pages pertinentes, lis les exemples et cite tes sources.
Autres clients et dépannage

Pour les clients utilisant mcpServers, adapte cet exemple à leur format :

{
  "mcpServers": {
    "groupez-docs": {
      "url": ""
    }
  }
}

Les outils disponibles sont search, get_page et list_pages. Après une mise à jour, actualise les outils du connecteur. Si ton IA n’y accède pas, vérifie que le connecteur est activé dans la conversation et que ton compte autorise les MCP personnalisés. Ouvrir l’URL dans un navigateur n’est pas un test MCP.