CustomiZer

CustomiZer

Le plugin tout-en-un de contenu personnalisé pour les serveurs Paper. Aucune dépendance à gérer. Aucun format à mémoriser. Configurez et jouez.

✓ Pack de ressources automatique ✓ Rechargement à chaud avec /z reload ✓ Compatible avec les packs ItemsAdder ✓ Convertisseur automatique Bedrock / Geyser Objets · Blocs · Armures personnalisés Épées · Pioches · Houes · Cultures Maîtrise · Missions · Prestige Emplacements de gemmes · Reforgement · Artisanat Cosmétiques · Sacs à dos

Qu'est-ce qui différencie CustomiZer ?

La plupart des plugins de contenu personnalisé vous obligent à gérer les packs de ressources manuellement — zipper les fichiers à la main, les héberger quelque part, et espérer que rien ne casse. CustomiZer construit le pack pour vous, le sert depuis un serveur HTTP intégré, et l'envoie à chaque joueur qui se connecte. Vous ne touchez jamais à un fichier ZIP.

La configuration se fait dans de simples fichiers YAML conçus pour être lisibles par des humains, pas seulement des développeurs. Si vous avez déjà utilisé ItemsAdder, vous connaissez déjà le format des packs. Sinon, les guides ci-dessous vous guideront pas à pas.

CustomiZer main /zitems GUI

Le menu principal /zitems — une interface GUI entièrement personnalisée qui permet aux joueurs de parcourir chaque pack, arme, outil et objet de votre serveur. Les administrateurs peuvent donner des objets d'un seul clic.

CustomiZer vs ItemsAdder & Nexo

Si vous avez cherché des plugins de contenu personnalisé, vous avez probablement regardé ItemsAdder et Nexo (anciennement Oraxen — Nexo est simplement une suite payante du même projet sous un nouveau nom). Voici comment CustomiZer se compare :

FonctionnalitéCustomiZerItemsAdderNexo (ex-Oraxen)
Serveur de pack de ressources intégré✓ Serveur HTTP intégré (nécessite la config URL/port)Nécessite un hébergement manuel ou externeNécessite un hébergement manuel ou externe
Système de niveaux d'armes basé sur les kills✓ Chaîne de rarité entièrement configurable
Houes moissonneuses avec progression XP✓ Capacités par niveau
Pioches personnalisées avec progression minière✓ Minage en zone, effets débloqués par niveau
Sets d'armures avec bonus de set✓ Effets de potion + commandesPartielPartiel
Système d'emplacements de gemmes✓ Intégré✗ (tiers)✗ (tiers)
Maîtrise / Missions / Prestige✓ Les trois intégrés
Générateurs de minerai✓ Par monde, par biome, par hauteur
Personnalisation du menu ESC✓ + Support Lunar & Feather Client
Tables d'artisanat personnalisées (GUI)✓ IntégréPartiel
Compatible avec le format de pack ItemsAdder✓ Compatible plug-and-play
Conversion Bedrock / Geyser✓ Convertisseur automatique complet intégré (objets, blocs, modèles 3D, GUIs, mobilier, animations)Partiel — mappages Geyser manuels, pas de convertisseur automatiquePartiel — support Geyser basique, configuration manuelle requise
Sacs à dos liés aux objets✓ Échangez l'objet, transférez le contenuPartiel (tiers)
TarifPayant (~25€)PayantPayant
En résumé : ItemsAdder et Nexo sont excellents pour les textures et objets personnalisés. CustomiZer fait cela et propose un écosystème de progression complet (armes à niveaux, pioches minières, houes moissonneuses, maîtrise, missions, prestige, emplacements de gemmes, sets d'armures, sacs à dos) plus un convertisseur automatique Bedrock/Geyser — le tout dans un seul plugin. Ni ItemsAdder ni Nexo n'approchent cette étendue fonctionnelle.

Vue d'ensemble

Il y a deux systèmes distincts avec lesquels vous travaillerez, et comprendre la différence est la clé pour maîtriser ce plugin :

📦
Dossier packs/
Contenu du pack de ressources — textures, modèles, et définitions d'objets qui constituent le pack de ressources Minecraft téléchargé par les joueurs.
📁
Dossier CustomiZe!
Mécaniques de jeu — épées avec niveaux, blocs avec récompenses, pioches avec progression minière, sets d'armures, et bien plus.

Pensez-y ainsi : packs/ concerne l'apparence des choses. CustomiZe! concerne le comportement des choses. Pour de nombreuses fonctionnalités, vous avez besoin des deux — une texture dans packs/ et une définition de comportement dans CustomiZe!.

Tout ce que ce plugin peut faire

💎
Objets personnalisés
Objets cliquables avec actions : commandes, soins, argent, buffs, effets alimentaires.
⚔️
Épées & Haches
Attributs, effets, vol de vie et dégâts élémentaires. Système optionnel de niveaux basé sur les kills avec jusqu'à 5 niveaux de rareté.
🛡️
Armures personnalisées
Modèles 3D portés, bonus d'attributs, effets de potion, bonus de sets d'armures.
🪨
Blocs personnalisés
Blocs entièrement plaçables avec exigences de minage, drops personnalisés, sons et récompenses XP Jobs.
⛏️
Pioches
Montez de niveau en minant. Chaque niveau débloque un minage en zone, de meilleurs effets, et une nouvelle texture.
🌾
Houes moissonneuses
Récolte automatique, replantation automatique, vente automatique, niveaux XP avec améliorations de capacités.
🌱
Cultures personnalisées
Plantes à plusieurs stades de croissance avec tables de loot personnalisées et effets alimentaires à la récolte.
🔤
Glyphes de police
Images PNG rendues comme caractères texte — utilisées pour les arrière-plans de GUI, icônes de rang et art du menu ESC.
🖼️
Menu ESC
Remplacez le texte du menu pause par des logos et images personnalisés.
💠
Emplacements de gemmes
Insérez des gemmes dans les armes et armures pour des bonus de statistiques permanents.
🧲
Sets d'armures
Effets bonus en portant 2 ou 4 pièces d'armure correspondantes.
⛰️
Générateurs de minerai
Injectez des minerais personnalisés dans la génération du monde — par monde, par biome, par plage de hauteur.
Pistes de maîtrise
XP persistant pour le minage, le combat, l'agriculture. Récompenses de jalons à des niveaux clés.
📋
Missions
Objectifs quotidiens et hebdomadaires qui se réinitialisent automatiquement.
👑
Prestige
Atteignez le maximum dans les pistes de maîtrise et prestigez pour des multiplicateurs de bonus permanents.
🔩
Artisanat personnalisé
GUIs d'établis personnalisés avec emplacements d'entrée/sortie configurables.
🎭
Cosmétiques
Objets décoratifs portables — chapeaux, capes, ailes — que les joueurs peuvent équiper sans remplacer leur armure.
🎒
Sacs à dos
Inventaires persistants liés à l'objet. Échangez le sac à dos physique pour transférer tout son contenu à un autre joueur.
🔨
Reforgement
Relancez les modificateurs de statistiques sur les armes et armures avec des pierres de reforgeage. Pool de modificateurs et poids configurables.
🟦
Bedrock / Geyser
Convertissez automatiquement tout votre pack pour les joueurs Bedrock via Geyser — objets 3D, blocs, GUIs, mobilier et animations.

Installation

De zéro à un serveur fonctionnel avec CustomiZer en cinq minutes.

Prérequis

PrérequisDétails
Logiciel serveurPaper 1.21+ (Spigot N'EST PAS supporté)
JavaJava 21 ou plus récent
PacketEventsRequis — listez-le sous libraries: dans plugin.yml ou installez-le séparément
VaultOptionnel — nécessaire pour les récompenses monétaires et les coûts de réparation

Configuration étape par étape

1

Déposez le JAR dans plugins/

Copiez CustomiZer.jar dans le dossier plugins/ de votre serveur. Démarrez le serveur une fois. CustomiZer générera tous ses fichiers de configuration et sa structure de dossiers automatiquement. Ensuite, arrêtez le serveur.

2

Définissez votre IP publique dans config.yml

Ouvrez plugins/CustomiZer/config.yml et trouvez la section resourcepack. Définissez url sur l'adresse IP publique ou le nom de domaine de votre serveur. C'est l'adresse depuis laquelle les clients Minecraft des joueurs téléchargeront le pack.

resourcepack:
  enabled: true
  url: "http://123.456.789.0"   # Votre IP publique
  port: 7270                     # Port pour le serveur HTTP du pack (ouvrez ce port dans votre pare-feu !)

Le port 7270 (ou celui que vous avez défini) doit être ouvert dans le pare-feu de votre serveur. C'est un port distinct de celui de votre serveur Minecraft.

3

Ajoutez vos packs (optionnel pour commencer)

Si vous avez des packs de ressources à ajouter, placez-les dans plugins/CustomiZer/packs/. Vous pouvez ignorer cela pour l'instant et y revenir plus tard — le plugin fonctionne très bien avec uniquement le contenu intégré.

4

Démarrez le serveur

Démarrez le serveur. Dans la console, vous verrez des messages comme [ResourcePack] HTTP server started on port 7270 et [ResourcePack] Pack ready. Lorsqu'un joueur se connecte, il recevra automatiquement une invite pour télécharger le pack de ressources.

5

Effectuez des modifications et rechargez

Chaque fois que vous modifiez des fichiers de configuration, exécutez /z reload en jeu ou depuis la console. Cela recharge toutes les configurations et reconstruit le pack de ressources en arrière-plan — aucun redémarrage nécessaire.

Structure des dossiers après le premier démarrage

plugins/CustomiZer/
packs/ ← Placez les packs de ressources ici
CustomiZe!/ ← Configurez les mécaniques de jeu ici
__global__/ ← Configurations globales au serveur (toujours chargées)
my_pack/ ← Surcharges de configuration par pack
includes/ ← Surcharges de pack à priorité maximale
lang/ ← en.yml, fr.yml (messages du plugin)
gui/ ← Configuration de l'apparence des GUIs
main_menu.yml ← Navigateur de catégories /z gui (titre, fond, bordure, bouton Parcourir tout)
items_shop.yml ← Boutons nav /zitems
all_items.yml ← GUI paginé "Parcourir tous les objets"
db/ ← Fichiers de base de données
backpacks.db ← Stockage des inventaires de sacs à dos (SQLite)
custom_crafting_recipes.db
import_export/ ← Tous les dossiers d'import/export
item_input/ ← Déposez les objets ici pour l'import
geyser_output/ ← Sortie du pack Bedrock (/zpack geyser)
config.yml ← Configuration principale
settings.yml ← Débogage, intégrations, toggles du menu ESC
output.zip ← Pack généré (créé automatiquement, ne pas modifier)

config.yml

Le fichier de configuration principal — serveur de pack de ressources, langue, messages, bonus économiques.

Ce fichier se trouve à plugins/CustomiZer/config.yml. Les modifications prennent effet après /z reload.

Paramètres du pack de ressources

C'est la section la plus importante. Elle contrôle comment le pack est construit et servi aux joueurs.

resourcepack:
  enabled: true

  # L'URL publique depuis laquelle les joueurs téléchargeront le pack.
  # Doit être accessible depuis internet. Utilisez l'IP publique ou le domaine de votre serveur.
  url: "http://YOUR.PUBLIC.IP"

  # Le port HTTP sur lequel le plugin écoute. Ouvrez ce port dans votre pare-feu.
  port: 7270

  # Version du format du pack de ressources. 46 = Minecraft 1.21.x
  format: 46

  # Optionnel : fusionner des ZIPs de packs de ressources externes dans le pack généré.
  # Les chemins sont relatifs à votre dossier plugins/.
  merge-packs:
    - "ModelEngine/resource pack.zip"

Langue & Messages

language: en   # "en" ou "fr"

# Afficher un message dans la barre d'action quand les joueurs gagnent des récompenses
hotbar_message_enabled: true
hotbar_message_format: "&a{job} XP: &b{jobsxp}  &aMoney: &b{money}"

# Afficher un message dans la barre de boss
bossbar_message_enabled: true
bossbar_message_format: "{job} | XP: {jobsxp} | Money: {money}"
bossbar_color: BLUE     # BLUE, PURPLE, YELLOW, GREEN, WHITE
bossbar_style: SOLID    # SOLID, SEGMENTED_6, SEGMENTED_10, SEGMENTED_12, SEGMENTED_20

Bonus de région WorldGuard

Si WorldGuard est installé et activé dans settings.yml, vous pouvez multiplier ou diviser les récompenses dans des régions spécifiques :

# Les joueurs dans "vip_mine" gagnent 2x XP et argent
Multiplier:
  vip_mine: 2.0
  elite_zone: 3.0

# Les joueurs dans "noob_area" gagnent la moitié des récompenses
Diviser:
  noob_area: 2.0

# Bonus global temporel (tous les joueurs)
GlobalBoost:
  start: "18:00"
  end: "20:00"
  multiplier: 1.5

settings.yml

Mode débogage, toggles d'intégration optionnels, et paramètres de pack spécifiques aux clients.

# Mettre à true pour des logs de débogage détaillés dans la console. Laissez false en production.
debug: false

dependencies:
  # Activer si vous avez ItemsAdder ET voulez que ses blocs personnalisés donnent
  # des récompenses CustomiZer (XP Jobs, argent, etc.)
  itemsadder_support: false

  # Activer si vous avez WorldGuard ET voulez des multiplicateurs basés sur les régions.
  worldguard_integration_support: false

  # Activer si vous avez Jobs Reborn ET voulez que les blocs personnalisés donnent des XP Jobs.
  jobs_support: false

esc_menu:
  # Quand true : les joueurs Feather Client reçoivent le pack SANS l'art du menu ESC.
  # Feather Client est détecté automatiquement. Aucune configuration nécessaire.
  ignore_feather_client: false

  # Quand true : les joueurs Lunar Client reçoivent le pack SANS l'art du menu ESC.
  # Nécessite le plugin Apollo-Bukkit.
  ignore_lunar_client: false
Tous les paramètres de ce fichier prennent effet immédiatement à /z reload — aucun redémarrage du serveur nécessaire.

Comment fonctionne le pack de ressources

Comprendre ce qui se passe automatiquement pour savoir ce que vous N'avez PAS à faire.

Le processus automatique

Quand le serveur démarre (ou quand vous exécutez /z reload), CustomiZer fait tout ceci automatiquement :

1

Démarre un serveur HTTP

Un serveur web léger démarre sur le port que vous avez configuré (7270 par défaut). Ce serveur servira votre fichier de pack de ressources aux joueurs lorsqu'ils se connectent.

2

Analyse tous vos packs

Chaque dossier dans plugins/CustomiZer/packs/ est analysé. Tous les fichiers YAML dans leurs sous-dossiers configs/ sont lus et tous les objets, blocs, polices et surcharges du menu ESC sont enregistrés.

3

Génère les fichiers de modèles et d'états de bloc

Pour chaque objet défini avec generate: true, CustomiZer crée automatiquement le fichier de modèle JSON à partir de votre texture. Pour les blocs personnalisés, il crée les surcharges d'état de bloc de note-block. Vous n'écrivez jamais de JSON manuellement.

4

Construit et sert le pack

Tout est regroupé dans un fichier ZIP conservé en mémoire. Le pack est servi depuis your.ip:7270/<hash>.zip. Le hash change à chaque modification du pack, donc les joueurs obtiennent toujours la dernière version.

5

Envoie le pack aux joueurs qui se connectent

2 secondes après la connexion d'un joueur, il reçoit une invite lui demandant d'accepter le pack de ressources. Une fois accepté, toutes vos textures personnalisées, blocs et art GUI sont visibles pour lui.

Priorité du contenu

Quand deux sources essaient de définir le même fichier, cet ordre détermine lequel l'emporte :

PrioritéSourceQuand l'utiliser
1er (la plus haute)plugins/CustomiZer/includes/Mettez vos surcharges manuelles ici. Gagne toujours.
2eFichiers auto-générés (modèles, états de bloc, polices)Créés automatiquement depuis vos configurations YAML.
3emerge-packs dans config.ymlZIPs externes comme la sortie ModelEngine.
4e (la plus basse)Assets du dossier packs/Vos textures et modèles de pack.

Créer un Pack

Un guide convivial pour les débutants pour ajouter votre premier pack personnalisé.

Qu'est-ce qu'un "Pack" ?

Un pack est un dossier à l'intérieur de plugins/CustomiZer/packs/ qui contient deux choses :

  • Un dossier assets/ avec vos fichiers de textures et de modèles (comme un pack de ressources Minecraft standard)
  • Un dossier configs/ avec des fichiers YAML qui indiquent à CustomiZer quels objets et blocs existent dans ce pack

Étape par étape : votre premier pack

1

Créez la structure de dossiers

Créez cette structure à l'intérieur de plugins/CustomiZer/packs/ :

packs/my_first_pack/
assets/
my_first_pack/ ← doit correspondre à votre namespace
textures/
models/
configs/
items.yml
2

Ajoutez votre texture

Placez un fichier PNG dans assets/my_first_pack/textures/items/. Par exemple : ruby.png. Ce doit être une image de 16×16 (ou 32×32) pixels.

3

Créez items.yml

Ouvrez configs/items.yml et définissez votre objet :

info:
  namespace: my_first_pack   # Doit correspondre au nom de votre dossier assets

items:
  ruby:
    display_name: "Ruby"
    resource:
      generate: true          # Générer automatiquement le modèle depuis la texture
      material: PAPER         # Objet vanilla utilisé comme base
      model_id: 200350        # Numéro unique — ne doit pas entrer en conflit avec d'autres packs
      textures:
        - items/ruby.png      # Relatif à assets/my_first_pack/textures/
4

Enregistrez-le dans le GUI /zitems (optionnel)

Créez items/my_first_pack/gui.yml pour que les objets fonctionnels apparaissent dans /zitems. Créez optionnellement packs/my_first_pack/gui.yml pour afficher les visuels bruts dans /z gui.

# items/my_first_pack/gui.yml  ← affiché dans /zitems (outil admin)
name: "My First Pack"
slot: 20   # Position dans le menu principal /zitems

icon:
  pack: my_first_pack
  id: ruby
  lore:
    - "My custom items"

gui:
  title: "My First Pack"
  size: 6

items:
  - type: pack_item
    pack: my_first_pack
    id: ruby

Pour le navigateur d'affichage /z gui, créez packs/my_first_pack/gui.yml avec des entrées type: pack_item ou type: raw (même format, fichier différent).

5

Rechargez

Exécutez /z reload. Le pack de ressources se reconstruit en arrière-plan. Après quelques secondes, reconnectez-vous ou exécutez /zpack push pour envoyer le nouveau pack aux joueurs en ligne.

Vous pouvez maintenant donner l'objet avec /z give ruby ou le trouver dans /zitems.

Le model_id (Custom Model Data) doit être unique dans TOUS les packs de votre serveur. Gardez une feuille de calcul ou utilisez de grands plages de nombres par pack pour éviter les conflits. Par exemple : le pack A utilise 200000–200999, le pack B utilise 201000–201999.

Règles de namespace

  • Le namespace dans info.namespace doit être en minuscules, sans espaces, sans caractères spéciaux
  • Il doit correspondre au nom du dossier dans assets/
  • Vous référencez les objets de ce pack comme namespace:item_key — par exemple my_first_pack:ruby

Éléments du pack

Définissez des objets d'affichage personnalisés dans votre pack. Il s'agit de la couche visuelle — à quoi ressemble l'objet.

Les éléments de pack définis ici représentent le côté texture/modèle de votre contenu. Pour les rendre fonctionnels (drops depuis des blocs, donner des effets, etc.), configurez-les également dans le dossier CustomiZe!.

Objet simple avec modèle auto-généré

Utilisez ceci quand vous avez une texture PNG plate et voulez que CustomiZer crée automatiquement un modèle d'objet Minecraft :

info:
  namespace: my_pack

items:
  # La clé "ruby" est la façon dont vous référencez cet objet partout ailleurs.
  # Format : namespace:key → "my_pack:ruby"
  ruby:
    display_name: "Ruby"   # Affiché en jeu (supporte les codes couleur)
    resource:
      generate: true        # true = générer automatiquement le modèle depuis les textures
      material: PAPER       # Matériau vanilla (PAPER est un choix courant pour les objets plats)
      model_id: 200350      # Custom Model Data (doit être globalement unique)
      textures:
        - items/ruby.png    # Dans assets/my_pack/textures/items/ruby.png

Objet avec un modèle fait à la main

Utilisez ceci quand vous avez un modèle 3D JSON pré-fait (par exemple depuis Blockbench) :

  dragon_sword:
    display_name: "Dragon Sword"
    resource:
      generate: false                        # false = utiliser le modèle à model_path
      material: IRON_SWORD                   # Utiliser un matériau d'épée pour l'animation en main
      model_path: weapons/dragon_sword       # Dans assets/my_pack/models/weapons/dragon_sword.json

Objet avec permission

Seuls les joueurs avec la permission spécifiée peuvent voir ou utiliser cet objet :

  vip_gem:
    display_name: "VIP Gem"
    permission: myserver.vip.gem   # Nœud de permission optionnel
    resource:
      generate: true
      material: PAPER
      model_id: 200351
      textures:
        - items/vip_gem.png

Référence des champs d'objet

ChampRequis ?Description
display_namerequisNom affiché en jeu. Utilisez &a pour vert, &6 pour or, etc.
permissionoptionnelNœud de permission nécessaire pour utiliser/voir cet objet.
resource.generaterequistrue = générer automatiquement le modèle plat. false = utiliser model_path.
resource.materialrequisMatériau Minecraft vanilla (PAPER, IRON_SWORD, etc.)
resource.model_idsi generate=trueEntier Custom Model Data. Doit être globalement unique.
resource.texturessi generate=trueListe de chemins de textures relatifs à assets/namespace/textures/
resource.model_pathsi generate=falseChemin vers le JSON du modèle (sans l'extension .json)
behaviours.hatoptionneltrue = peut être porté sur l'emplacement tête

Blocs du pack

Blocs personnalisés pouvant être placés dans le monde, utilisant les états du bloc de note sous le capot pour un placement solide réel avec des textures personnalisées.

Minecraft ne supporte pas nativement les types de blocs personnalisés. CustomiZer utilise une astuce : il attribue des textures personnalisées à des "états" spécifiques du bloc de note (qui possède des centaines d'états inutilisés). Les joueurs ne voient jamais le bloc de note — ils voient votre texture personnalisée. Le bloc est entièrement solide et se comporte comme un vrai bloc.

⚠️ Deux fichiers sont toujours requis

Chaque bloc personnalisé nécessite deux fichiers de configuration séparés. C'est la chose la plus importante à comprendre :

FichierCe qui va iciContrôle
packs/your_pack/configs/blocks.ymlCôté pack de ressources (visuels seulement)Texture, ID de modèle, type de placement, particules de casse, sons
CustomiZe!/your_pack/blocks.ymlCôté gameplay / mécaniquesOutils pouvant le casser, drops, dureté, résistance aux explosions, émission de lumière, nom & lore d'affichage, récompenses XP Jobs, config CaveBlock
Gardez packs/ strictement visuel. La dureté, la résistance aux explosions, les drops et tout le comportement de jeu appartiennent à CustomiZe!. Le dossier packs/ décrit uniquement l'apparence du bloc.

Fichier 1 — packs/your_pack/configs/blocks.yml

Ce fichier enregistre le bloc dans le pack de ressources. Gardez-le purement visuel — textures, ID de modèle, type de placement, et sons de casse uniquement.

# packs/my_pack/configs/blocks.yml

info:
  namespace: my_pack

items:
  silver_ore:
    display_name: "Silver Ore"    # Nom de base pour le registre du pack
    resource:
      generate: true
      material: PAPER             # Toujours PAPER pour les blocs personnalisés
      model_id: 200426            # CMD unique — ne doit pas entrer en conflit avec un autre pack
      textures:
        - blocks/silver_ore.png   # Chemin dans assets/my_pack/textures/

    specific_properties:
      block:
        placed_model:
          type: REAL_NOTE         # Requis — utilise l'astuce du bloc de note
        sound:
          break:
            name: "BLOCK_STONE_BREAK"
            volume: 1
            pitch: 1

  deepslate_silver_ore:
    display_name: "Deepslate Silver Ore"
    resource:
      generate: true
      material: PAPER
      model_id: 200427            # CMD différent de silver_ore ci-dessus
      textures:
        - blocks/deepslate_silver_ore.png
    specific_properties:
      block:
        placed_model:
          type: REAL_NOTE
        sound:
          break:
            name: "BLOCK_DEEPSLATE_BREAK"
            volume: 1
            pitch: 1

Fichier 2 — CustomiZe!/your_pack/blocks.yml

Ce fichier contrôle tout le gameplay : temps de minage, résistance aux explosions, outils pouvant casser le bloc, ce qu'il drop, s'il brille, et récompenses XP Jobs. Consultez la page Blocs personnalisés (CustomiZe!) pour le format complet et toutes les options.

En résumé : packs/blocks.yml = l'apparence du bloc. CustomiZe!/blocks.yml = tout ce qui se passe quand vous le placez ou le minez.

Outils du pack

Outils et armes vanilla retexturisés — mêmes statistiques, apparence personnalisée.

Les outils de pack sont définis exactement comme les éléments de pack, mais avec un matériau d'outil comme base. Ils héritent de toutes les statistiques vanilla (durabilité, vitesse de minage, dégâts d'attaque) de ce matériau.

info:
  namespace: my_pack

items:
  silver_sword:
    display_name: "Silver Sword"
    resource:
      generate: true
      material: IRON_SWORD    # Statistiques d'une épée en fer, texture personnalisée
      model_id: 200500
      textures:
        - tools/silver_sword.png

  silver_pickaxe:
    display_name: "Silver Pickaxe"
    resource:
      generate: true
      material: IRON_PICKAXE  # Statistiques d'une pioche en fer, texture personnalisée
      model_id: 200501
      textures:
        - tools/silver_pickaxe.png

  mythril_axe:
    display_name: "Mythril Axe"
    resource:
      generate: true
      material: DIAMOND_AXE   # Statistiques diamant
      model_id: 200502
      textures:
        - tools/mythril_axe.png
Ce sont des retextures d'affichage uniquement. Si vous voulez des outils qui montent de niveau, ont des mécaniques personnalisées, ou font des dégâts différents — utilisez les Épées personnalisées ou les Pioches personnalisées dans le dossier CustomiZe! à la place.

Bons choix de matériaux par type d'outil

Type d'outilMatériau recommandé
ÉpéeWOODEN_SWORD, STONE_SWORD, IRON_SWORD, DIAMOND_SWORD
PiocheWOODEN_PICKAXE, IRON_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE
HacheWOODEN_AXE, IRON_AXE, DIAMOND_AXE
PelleIRON_SHOVEL, DIAMOND_SHOVEL
HoueIRON_HOE, DIAMOND_HOE
Objet génériquePAPER (le plus courant — pas de barre de durabilité, texture plate)

Images de police (Glyphes)

Images PNG rendues comme caractères texte — utilisées pour les arrière-plans de GUI, badges de rang, icônes dans la description, et art du menu ESC.

Qu'est-ce qu'une image de police ?

Minecraft supporte les polices personnalisées où chaque caractère peut être remplacé par une image PNG. CustomiZer l'utilise pour afficher des images partout où le texte est affiché — y compris les titres d'inventaire, la description d'objet, le chat, les tableaux de score, et le menu ESC.

C'est ainsi que fonctionnent les arrière-plans de GUI élaborés, les icônes de rang dans le chat, et les logos du menu ESC. Ce sont tous simplement des images PNG soigneusement positionnées rendues comme des "caractères".

Définir des images de police dans un pack

Créez un font.yml (ou tout fichier .yml) dans le dossier configs/ de votre pack :

info:
  namespace: my_pack

font_images:
  my_icon:                           # Clé utilisée pour afficher cette image
    path: "font/my_icon.png"         # Dans assets/my_pack/textures/font/my_icon.png
    scale_ratio: 11                  # Taille de l'image en pixels (hauteur)
    y_position: 9                    # Décalage vertical par rapport à la ligne de base du texte

Utiliser une image de police dans le texte

Une fois définie, vous affichez l'image en utilisant la balise MiniMessage <font_image> :

title: "<font_image:my_pack:my_icon>"
# ou dans la description d'objet :
lore:
  - "<font_image:my_pack:my_coin> 500 pièces"

L'image apparaît en ligne partout où du texte apparaît — dans les titres d'inventaire, les noms d'objets, les lignes de description, les messages de chat, etc.

Glyphes de badges de rang (exemple gem_ranks)

Les images de police peuvent être soumises à permission. Quand show_in_gui: true est défini, les joueurs avec la permission requise voient leur badge de rang affiché dans le GUI :

info:
  namespace: gem_ranks

font_images:
  bronze_amethyst_i:
    permission: bronze_amethyst_i     # Le joueur a besoin de cette permission pour voir ce glyphe
    show_in_gui: true                 # Afficher dans le GUI de rang
    path: "bronze_amethyst_i"         # assets/gem_ranks/textures/bronze_amethyst_i.png
    scale_ratio: 12
    y_position: 9.5

  gold_diamond_iii:
    permission: gold_diamond_iii
    show_in_gui: true
    path: "gold_diamond_iii"
    scale_ratio: 12
    y_position: 9.5

Donnez à un joueur la permission gem_ranks.bronze_amethyst_i et il verra ce badge apparaître à côté de son nom ou dans le GUI de rang.

Images de police d'arrière-plan GUI

L'arrière-plan du GUI (l'image derrière la grille d'inventaire) est également une image de police. Elle est rendue dans le titre de l'inventaire avec des caractères de décalage de pixels spéciaux :

info:
  namespace: CustomiZerInternal

font_images:
  "1":
    path: custom/30main_gui/1    # L'image d'arrière-plan du GUI
    scale_ratio: 255             # Grande échelle = arrière-plan complet de l'inventaire
    y_position: 46
    x_position: -6.5

Puis dans le titre du GUI :

title: "<white><shift:-8><font_image:CustomiZerInternal:1>"

Le <shift:-8> est un décalage de pixel qui positionne correctement l'image d'arrière-plan.

Conseils pour les images de police

  • scale_ratio : La hauteur de l'image en pixels de jeu. 11–12 est bien pour les petites icônes. 255 est utilisé pour les arrière-plans GUI plein écran.
  • y_position : Déplacez l'image vers le haut ou le bas par rapport à la ligne de texte. Positif = haut, négatif = bas.
  • Utilisez toujours des PNG avec transparence pour les icônes et badges.
  • Testez vos glyphes en vous donnant un objet papier avec la balise de police dans son nom.

Commandes de glyphes en jeu

CustomiZer inclut un ensemble complet de commandes d'administration pour parcourir, rechercher, prévisualiser et gérer les glyphes directement en jeu. Toutes nécessitent la permission cxp.admin.

/zpack fonts

Liste chaque image de police enregistrée dans tous les packs. Affiche le nom du pack, l'ID de police, le codepoint Unicode, et la balise exacte à coller dans gui.yml :

# Exemple de sortie dans le chat :
# [CustomiZer] Images de police enregistrées (12) :
#   gem_ranks:bronze_amethyst_i  U+E000  → gui.yml: <font_image:gem_ranks:bronze_amethyst_i>
#   my_pack:my_icon              U+E001  → gui.yml: <font_image:my_pack:my_icon>

/zpack font <packName> <fontId>

Prévisualise un seul glyphe. L'envoie à votre barre d'action pour que vous puissiez voir exactement son apparence en jeu. Exécutez cette commande chaque fois que vous ajoutez une nouvelle image de police et voulez vérifier sa taille et position.

/zpack glyph list [packName]

Liste tous les glyphes enregistrés (avec les métadonnées de l'API Glyph). Ajoutez un nom de pack pour filtrer uniquement les glyphes de ce pack :

# Tous les glyphes :
/zpack glyph list

# Uniquement les glyphes de "gem_ranks" :
/zpack glyph list gem_ranks
Sortie de liste de glyphes en jeu

Chaque entrée affiche le nom du pack, l'ID de police, le codepoint Unicode et deux liens cliquables — [copier balise] copie la balise <font_image:pack:id> complète prête à coller dans n'importe quel YAML, et [copier char] copie le caractère Unicode rendu lui-même. Pas besoin d'ouvrir un fichier YAML — trouvez le glyphe que vous voulez dans le chat, cliquez copier, collez-le où vous en avez besoin.

/zpack glyph <packName> <fontId>

Affiche des informations détaillées sur un glyphe spécifique — son codepoint, le caractère Unicode, et la balise YAML pour l'utiliser.

/zpack glyph search <query>

Recherche tous les glyphes enregistrés par nom. Utile quand vous avez de nombreuses images de police et ne vous souvenez pas de l'ID exact :

/zpack glyph search bronze

/zpack glyph export

Affiche des extraits YAML pour chaque glyphe enregistré. Utile si vous voulez verrouiller les codepoints pour qu'ils ne changent pas après un rechargement (copiez la sortie dans vos configs de pack).

/zpack glyph regenerate

Efface tout le registre de codepoints de glyphes et réattribue tous les codepoints de zéro. Utilisez ceci si les codepoints se sont désalignés après l'ajout ou la suppression de glyphes. Attention : les joueurs doivent re-télécharger le pack de ressources après avoir exécuté cette commande.

Intégration PlaceholderAPI

Si PlaceholderAPI est installé, vous pouvez utiliser des glyphes comme placeholders partout où PAPI est supporté :

PlaceholderRetourne
%customizer_glyph_<pack>_<id>%Le caractère rendu (à utiliser dans le chat, la description, etc.)
%customizer_glyph_unicode_<pack>_<id>%Échappement Unicode (ex. \uEC00)
%customizer_glyph_hex_<pack>_<id>%Codepoint hexadécimal (ex. EC00)

Exemple dans un préfixe LuckPerms : [%customizer_glyph_gem_ranks_gold_i%] — cela affiche l'icône de rang or à côté du nom du joueur dans le chat.

Personnalisation du menu ESC

Remplacez le texte du menu pause vanilla (comme "Menu du jeu" et "Se déconnecter") par des images PNG personnalisées.

Comment ça fonctionne

Les boutons du menu ESC de Minecraft affichent du texte depuis les fichiers de langue — par exemple, le titre affiche la traduction de menu.game. CustomiZer injecte des caractères de police personnalisés dans ces chaînes de traduction, remplaçant le texte par vos caractères d'image PNG.

Le résultat : les joueurs ouvrent leur menu ESC et au lieu de "Menu du jeu", ils voient l'image du logo de votre serveur.

Configuration

Créez un fichier de configuration YAML dans le dossier configs/ de votre pack :

info:
  namespace: my_esc_pack

minecraft_lang_overwrite:
  esc_menu_texts:
    entries:
      # Remplacer le titre "Menu du jeu" par votre image de logo
      "menu.game": ":top_logo_1::offset_-1:"

      # Remplacer le texte du bouton "Se déconnecter" par une image de bannière personnalisée
      "menu.disconnect": ":offset_-10::offset_-256::bottom_banner::offset_-256:"

    # Appliquer à tous les fichiers de langue (ALL), ou à des spécifiques : [en_us, fr_fr]
    languages:
      - ALL

    # Pour les joueurs Lunar Client (nécessite Apollo-Bukkit) :
    # Définissez ceci sur l'emplacement de ressource de la même image de logo
    apollo_icon: "my_esc_pack:textures/top_logo_1.png"

La syntaxe des tokens

Dans la valeur de la chaîne, vous utilisez des tokens entourés de deux-points :

  • :my_image_key: — affiche l'image de police définie comme my_image_key dans votre font.yml
  • :offset_-256: — déplace le curseur vers la gauche de 256 pixels (utilisé pour positionner les images)
  • :offset_10: — déplace le curseur vers la droite de 10 pixels

Compatibilité client

ClientMenu ESC fonctionne ?Comment
Minecraft vanilla✅ OuiSurcharge de langue (automatique)
Lunar Client✅ OuiVia apollo_icon + plugin Apollo-Bukkit
Feather Client⚠️ ConfigurableDéfinissez ignore_feather_client: true dans settings.yml pour ignorer l'art ESC pour les joueurs Feather

Le dossier CustomiZe!

Où vous configurez les mécaniques de gameplay — complètement séparé du système de packs visuels.

Pourquoi est-il séparé ?

Le dossier packs/ gère l'apparence — textures, modèles, sons. Le dossier CustomiZe!/ gère le comportement — comment les objets fonctionnent dans le jeu.

Cette séparation existe parce que de nombreux serveurs veulent utiliser des packs de ressources tiers (achetés ou téléchargés) exactement tels quels, sans les modifier. En gardant la configuration de comportement séparée, vous pouvez utiliser les textures de n'importe quel pack tout en contrôlant entièrement le fonctionnement de ces objets sur votre serveur.

Structure des dossiers

plugins/CustomiZer/CustomiZe!/
__global__/ ← Configuration globale au serveur (chargée en premier)
items.yml ← Objets utilisables personnalisés avec actions
swords.yml ← Épées personnalisées avec rareté et progression
axes.yml ← Haches personnalisées (même format que les épées)
armors.yml ← Pièces d'armure personnalisées
blocks.yml ← Blocs personnalisés avec drops et récompenses
pickaxes.yml ← Pioches à niveaux
harvesterhoes.yml ← Houes moissonneuses avec récolte automatique
cosmetics.yml ← Objets cosmétiques portables
gems.yml ← Définitions d'emplacements de gemmes
sets.yml ← Bonus de sets d'armures
defaulkttools/ ← Surcharges par pack pour le pack "defaulkttools"
swords.yml ← Épées spécifiques à ce pack seulement
pickaxes.yml
gui.yml ← Objets fonctionnels affichés dans /zitems pour ce pack
barrel_knight/
armors.yml
blocks.yml
packs/ ← Fichiers du navigateur d'affichage par pack pour /z gui
defaulkttools/
gui.yml ← Objets visuels bruts affichés dans /z gui pour ce pack

Comment la fusion fonctionne

Tous les fichiers CustomiZe!/*/swords.yml sont fusionnés en profondeur au moment du chargement. __global__ se charge en premier, puis chaque dossier de pack par ordre alphabétique. Cela signifie :

  • Vous pouvez ajouter des épées spécifiques au pack dans CustomiZe!/my_pack/swords.yml sans toucher au fichier global
  • Les objets/blocs/épées/etc. de tous les packs sont combinés en une grande liste
  • Si deux fichiers définissent la même clé, le fichier chargé en dernier l'emporte (ordre alphabétique)

Référence rapide — quel fichier pour quoi ?

Je veux configurer...Fichier à modifier
Un objet cliquable avec effets/commandesCustomiZe!/__global__/items.yml
Une épée qui monte de niveau et change de textureCustomiZe!/__global__/swords.yml
Une pièce d'armure avec attributsCustomiZe!/__global__/armors.yml
Un bloc plaçable avec drops et XP JobsCustomiZe!/__global__/blocks.yml
Une pioche à niveaux avec minage en zoneCustomiZe!/__global__/pickaxes.yml
Une houe moissonneuse avec replantation automatiqueCustomiZe!/__global__/harvesterhoes.yml
Comment un pack apparaît dans /zitems (objets fonctionnels)items/my_pack/gui.yml
Comment un pack apparaît dans /z gui (navigateur d'affichage)packs/my_pack/gui.yml
Boutons nav /zitemsplugins/CustomiZer/gui/items_shop.yml
Apparence du navigateur de catégories /z guiplugins/CustomiZer/gui/main_menu.yml

Objets personnalisés

Objets utilisables avec actions au clic, temps de recharge, utilisations limitées et effets alimentaires.

Fichier : plugins/CustomiZer/CustomiZe!/__global__/items.yml
Ou par pack : CustomiZe!/my_pack/items.yml

Qu'est-ce qu'un objet personnalisé ?

Un objet personnalisé est tout objet qui fait quelque chose de spécial au clic droit (ou quand on le mange). Exemples : un parchemin qui exécute une commande, une potion de santé qui restaure des cœurs, un sac d'argent qui donne de la monnaie, un aliment qui applique des effets de potion.

Les objets personnalisés sont définis ici. La texture provient d'un élément de pack dans packs/. Vous les connectez en faisant correspondre le numéro MODELDATA au model_id dans votre pack.

Exemple complet

items:
  teleport_scroll:
    TYPE: PAPER                     # Matériau vanilla (doit correspondre au matériau de l'élément de pack)
    NAME: "&d✦ Teleport Scroll"
    LORE:
      - "&7Right-click to teleport to spawn."
      - "&8Cooldown: 30 seconds"
      - "&8Uses: &f%uses% &8remaining"
    MODELDATA: 12000               # Doit correspondre au model_id dans votre définition d'élément de pack
    COOLDOWN: 30                   # Secondes entre les utilisations
    USE: 5                         # L'objet se casse après 5 utilisations (-1 = illimité)
    INTERACTS:
      - RIGHT_CLICK_AIR
      - RIGHT_CLICK_BLOCK
    ACTION:
      TYPE: COMMAND
      COMMAND: "spawn %player%"    # %player% est remplacé par le nom du joueur

Tous les types d'ACTION

TYPEChamps supplémentaires requisCe qu'il fait
COMMANDCOMMAND: "commande ici"Exécute une commande console. Utilisez %player% pour le nom du joueur.
HEALRestaure 2 cœurs (4 points de vie) instantanément.
JUMPDURATION: 10Donne Saut II pendant N secondes.
SPEEDDURATION: 10Donne Vitesse II pendant N secondes.
REGENDURATION: 10Donne Régénération II pendant N secondes.
STRENGTHDURATION: 10Donne Force II pendant N secondes.
LUCKDURATION: 10Donne Chance II pendant N secondes.
GODRend le joueur invulnérable (mode dieu).
FLYActive le vol en mode créatif.
MONEYAMOUNT: 500Donne exactement ce montant via l'économie Vault.
RANDOMMONEYAMOUNT: 100 + MAX_AMOUNT: 500Donne un montant aléatoire entre min et max.
JOBSBOOSTERJOB_BOOST_MULTIPLIER: 1.5 + JOB_BOOST_DURATION: 300Booste temporairement les gains XP Jobs.
EATUtilise le bloc FOOD ci-dessousL'objet est mangé. Les effets s'appliquent après consommation.
NONEObjet d'affichage uniquement. Rien ne se passe au clic.

Options INTERACTS

Contrôle quels clics déclenchent l'action :

ValeurQuand elle se déclenche
RIGHT_CLICK_AIRClic droit en regardant le ciel
RIGHT_CLICK_BLOCKClic droit en regardant un bloc
SHIFT_RIGHT_CLICK_AIRMaj + clic droit dans les airs
SHIFT_RIGHT_CLICK_BLOCKMaj + clic droit sur un bloc

Objets alimentaires

N'importe quel objet peut être rendu comestible — même le PAPIER. Ajoutez un bloc FOOD et définissez ACTION TYPE: EAT :

items:
  magic_herb:
    TYPE: PAPER
    NAME: "&aMagic Herb"
    LORE:
      - "&7Eat to gain Regeneration and Speed."
    MODELDATA: 12010
    COOLDOWN: 0
    USE: -1
    INTERACTS: []       # Vide — manger déclenche l'action, pas le clic
    ACTION:
      TYPE: EAT
    FOOD:
      NUTRITION: 4              # Barres de faim restaurées (2 = un pilon)
      SATURATION: 0.6           # Saturation ajoutée (0.0–1.0)
      CAN_ALWAYS_EAT: true      # Le joueur peut manger ceci même s'il n'a pas faim
      EFFECTS:
        - effect: REGENERATION
          duration: 200          # ticks (20 ticks = 1 seconde, donc 200 = 10 secondes)
          amplifier: 1           # 0 = Niveau I, 1 = Niveau II, 2 = Niveau III
          chance: 1.0            # 100% de chance
        - effect: SPEED
          duration: 100          # 5 secondes
          amplifier: 0           # Vitesse I
          chance: 0.5            # 50% de chance — peut ne pas s'appliquer !

Placeholders de description

Dans la description de l'objet, vous pouvez utiliser %uses% pour afficher les utilisations restantes dynamiquement. Les codes couleur (&a, &6, etc.) et les balises MiniMessage fonctionnent dans NAME et LORE.

Épées & Haches personnalisées

Armes personnalisées avec attributs, enchantements, effets de coup, dégâts élémentaires et vol de vie. Chaque fonctionnalité listée ci-dessous est optionnelle — une épée n'a besoin d'aucune configuration spéciale pour fonctionner comme un simple objet personnalisé.

Fichiers : CustomiZe!/__global__/swords.yml et CustomiZe!/__global__/axes.yml. Les haches utilisent exactement le même format sous une clé racine axes: au lieu de swords:.
Le système de niveaux par rareté / kills est 100% optionnel. Voir la page Système de niveaux. Vous pouvez omettre entièrement le bloc rarity: et l'épée fonctionne très bien.

Toutes les clés de configuration

CléTypeRequis ?DéfautDescription
typeChaîneOptionnelIRON_SWORDMatériau vanilla. Doit correspondre au matériau de l'élément de pack.
pack_idChaîneOptionnelFormat : packName:itemId. Si défini, le matériau et CMD sont résolus depuis PackManager — omettez type et custom_model_data.
display_nameChaîneOptionnel"Custom Sword"Nom par défaut quand aucun niveau de rareté n'est actif.
custom_model_dataEntierOptionnel0CMD de repli quand aucun bloc de rareté n'est présent.
durabilityEntierOptionnelMax du matériauDurabilité personnalisée suivie par le plugin (indépendante des dégâts vanilla). Stockée dans le NBT de l'objet.
HIDE-ENCHANTSBooléenOptionnelfalseMasque l'éclat d'enchantement et les lignes d'info-bulle.
loreListe<Chaîne>Optionnel[]Lignes de description de base. Supporte les placeholders listés ci-dessous et les balises couleur MiniMessage.
enchantmentsSectionOptionnelMap nom d'enchantement → niveau (voir ci-dessous).
attributesSectionOptionnelMap nom d'attribut → valeur plate (voir ci-dessous).
effects-enemySectionOptionnelEffets de potion appliqués à l'ennemi touché à chaque attaque.
effects-selfSectionOptionnelEffets de potion appliqués à l'attaquant à chaque coup.
elemental_damageChaîneOptionnel"None"Élément cosmétique/fonctionnel : Fire, Ice, Lightning, Shadow, ou None.
raritySectionOptionnelSystème d'amélioration basé sur les kills. Supprimez entièrement ce bloc pour une épée statique. Voir Système de niveaux.

Attributs

Écrits comme une map plate sous attributes:. Les valeurs s'ajoutent aux statistiques par défaut du matériau de base. Tous sont optionnels — incluez uniquement ce dont vous avez besoin.

Nom de l'attributEffetValeur exemple
GENERIC_ATTACK_DAMAGEDégâts d'attaque plats ajoutés aux coups8.0
GENERIC_ATTACK_SPEEDVitesse d'attaque (défaut vanilla ≈ 1.6)1.6
GENERIC_MAX_HEALTHSanté maximale bonus (2.0 = 1 cœur supplémentaire)4.0
GENERIC_MOVEMENT_SPEEDBonus de multiplicateur de vitesse de déplacement0.02
GENERIC_KNOCKBACK_RESISTANCERéduit les reculs reçus (1.0 = immunisé)0.5
GENERIC_LUCKModificateur de chance (affecte les tables de loot)2.0
Les valeurs d'attribut sont liées à l'emplacement main principale. Le plugin les ajoute comme modificateurs plats en utilisant l'opération ADD_NUMBER.

Enchantements

Écrits comme section enchantments: avec nom d'enchantement (clé de registre Bukkit) → niveau :

enchantments:
  sharpness: 5
  unbreaking: 3
  looting: 2
  fire_aspect: 2
  knockback: 2
  sweeping_edge: 3

Effets de coup (effects-enemy / effects-self)

Chaque entrée sous effects-enemy ou effects-self est une clé d'effet de potion avec deux sous-clés :

Sous-cléTypeDéfautDescription
chanceDouble (0.0–1.0)0.0Probabilité par coup. 1.0 = 100%, 0.5 = 50%.
durationEntier (ticks)100Durée de l'effet. 20 ticks = 1 seconde.

Le nom de l'effet est la clé de registre Bukkit PotionEffectType. Les plus courants :

Clé d'effetCe qu'il fait
slownessRalentit la vitesse de déplacement
weaknessRéduit les dégâts d'attaque
poisonInflige des dégâts dans le temps (ne tue pas en dessous de 1pv)
witherInflige des dégâts dans le temps (peut tuer)
blindnessRéduit le champ de vision du joueur
nauseaEffet de tremblement d'écran
levitationSoulève l'entité dans les airs
strength(soi seulement) Augmente vos dégâts
speed(soi seulement) Augmente la vitesse de déplacement
regeneration(soi seulement) Soigne dans le temps
absorption(soi seulement) Ajoute des cœurs d'absorption
resistance(soi seulement) Réduit les dégâts entrants

Dégâts élémentaires

Définissez elemental_damage sur l'une de ces valeurs. Chacune déclenche un effet différent au coup :

ValeurEffet sur l'ennemi
FireMet la cible en feu
IceApplique Lenteur à la cible
LightningFrappe la foudre à l'emplacement de la cible
ShadowApplique Cécité à la cible
NonePas d'effet élémentaire (défaut)

Vol de vie

Le vol de vie est automatique quand le bloc rarity est présent — vous ne le configurez pas manuellement. Le montant s'adapte au niveau de rareté actuel :

Niveau de raretéVol de vie
Commun0.01 PV plat par coup
Rare15% des dégâts infligés
Épique25% des dégâts infligés
Légendaire35% des dégâts infligés
Mythique50% des dégâts infligés
Le vol de vie ne s'active que quand le système de rareté est activé (l'épée a un bloc rarity:). Les épées statiques sans bloc de rareté n'ont pas de vol de vie.

Placeholders de description

PlaceholderRemplacé par
%custom_durability%Durabilité restante actuelle
%max_custom_durability%Durabilité maximale à ce niveau
%rarity%Nom du niveau de rareté actuel (seulement quand le bloc rarity existe)
%progress%Kills vers la prochaine amélioration
%required%Total de kills requis pour la prochaine amélioration
%total_kills%Kills totaux de tous les temps avec cette arme
%total_blocks%Blocs cassés avec cette épée

Exemple minimal (sans niveaux)

swords:
  fire_sword:
    type: IRON_SWORD
    display_name: "&c&l🔥 Fire Sword"
    durability: 3000
    HIDE-ENCHANTS: true
    lore:
      - "&7A sword kissed by flame."
      - "&8Durability: %custom_durability% / %max_custom_durability%"
    attributes:
      GENERIC_ATTACK_DAMAGE: 8.0
      GENERIC_ATTACK_SPEED: 1.8
    enchantments:
      unbreaking: 3
      looting: 2
    effects-enemy:
      slowness:
        chance: 0.5        # 50% de chance par coup
        duration: 60       # 3 secondes
    elemental_damage: Fire

Exemple complet (avec niveaux de rareté)

swords:
  dragon_blade:
    type: IRON_SWORD
    display_name: "&4Dragon Blade"
    durability: 5000
    HIDE-ENCHANTS: true
    lore:
      - "&8Rarity: %rarity%"
      - "&8Progress: %progress% / %required% kills"
      - "&8Durability: %custom_durability% / %max_custom_durability%"
    attributes:
      GENERIC_ATTACK_DAMAGE: 10.0
      GENERIC_ATTACK_SPEED: 1.6
    enchantments:
      sharpness: 3
      looting: 2
    effects-enemy:
      slowness:
        chance: 0.40
        duration: 60
      weakness:
        chance: 0.25
        duration: 100
    effects-self:
      strength:
        chance: 0.15
        duration: 120
    elemental_damage: Fire

    # Supprimez entièrement ce bloc rarity si vous ne voulez pas de niveaux
    rarity:
      common:
        custom_model_data: 32001
        name: "&7Common Dragon Blade"
      rare:
        custom_model_data: 32002
        name: "&9Rare Dragon Blade"
      epic:
        custom_model_data: 32003
        name: "&5Epic Dragon Blade"
      legendary:
        custom_model_data: 32004
        name: "&6Legendary Dragon Blade"
      mythical:
        custom_model_data: 32005
        name: "&dMythical Dragon Blade"

Armures personnalisées

Pièces d'armure avec bonus de statistiques, effets de potion quand portées, cosmétiques de marque d'armure, et modèles 3D équipables.

Fichier : CustomiZe!/__global__/armors.yml

Toutes les clés de configuration

CléTypeRequis ?Description
typeChaîneRequis (mode natif)Matériau d'armure vanilla, ex. DIAMOND_HELMET. Utilisé quand PAS en mode pack_id.
pack_idChaîneOptionnelFormat : packName:itemId. Si défini, matériau et CMD sont tirés de PackManager automatiquement — omettez type, model_data.
base_materialChaîneOptionnelSurcharge le matériau vanilla sous-jacent pour la liaison d'emplacement d'attribut seulement. Ex. définissez base_material: NETHERITE_CHESTPLATE pour que votre cuirasse en cuir personnalisée obtienne les emplacements d'attributs de la netherite.
display_nameChaîneRequisNom d'objet montré aux joueurs. Supporte MiniMessage.
loreListe<Chaîne>OptionnelLignes de description. Supporte les balises couleur MiniMessage.
model_dataEntierOptionnelCustom Model Data. Utilisé en mode natif (sans pack_id).
item_modelChaîneOptionnelComposant de modèle d'objet 1.21.4+ (namespace:chemin). Alternative au CMD pour les versions Minecraft plus récentes.
attributesListe<Map>OptionnelBonus de statistiques appliqués pendant que la pièce est portée. Chaque entrée a attribute, amount, et operation.
potion_effectsListe<Map>OptionnelEffets de potion appliqués pendant que l'armure est équipée ; supprimés quand elle est retirée.
trimSectionOptionnelMarque d'armure cosmétique. Clés : material et pattern.
equippableSectionOptionnelComposant équipable 1.21.4+ pour les modèles portés en 3D. Clés : model et equip_sound.

Attributs

Les attributs sont une liste. Chaque entrée est une map avec trois clés : attribute, amount, et operation. Tous sont liés à l'emplacement d'équipement de l'armure automatiquement.

Nom de l'attributEffetNotes
GENERIC_MAX_HEALTHSanté maximale bonus2.0 = 1 cœur supplémentaire
GENERIC_ARMORPoints d'armure2.0 = 1 segment de barre d'armure
GENERIC_ARMOR_TOUGHNESSRobustesse d'armureRéduit les dégâts des coups à haute puissance
GENERIC_MOVEMENT_SPEEDBonus de vitesse de marche0.01 ≈ légère augmentation de vitesse
GENERIC_KNOCKBACK_RESISTANCERéduit le recul1.0 = complètement immunisé au recul
GENERIC_ATTACK_DAMAGEBonus de dégâts en mêléeFonctionne aussi sur l'armure (cas d'utilisation rare)
GENERIC_LUCKModificateur de chanceAffecte les lancers de tables de loot

Opérations d'attribut

operationEffet
ADD_NUMBERAjoute une valeur plate. La plus courante pour les bonus d'armure/santé.
ADD_SCALARAjoute un pourcentage de la valeur d'attribut de base.
MULTIPLY_SCALAR_1Multiplie la valeur de base par le montant donné.

Effets de potion (pendant que portée)

Chaque entrée dans potion_effects est une map avec trois clés :

CléTypeDescription
effectChaîneClé de registre Bukkit PotionEffectType, ex. fire_resistance, strength, speed, regeneration, night_vision, water_breathing
durationEntier (ticks)Durée de l'effet. Utilisez un très grand nombre comme 999999 pour permanent pendant le port.
amplifierEntierNiveau de l'effet. 0 = Niveau I, 1 = Niveau II, 2 = Niveau III.
Les effets de potion sont appliqués quand le joueur équipe l'armure et supprimés quand il la retire. Le plugin les rafraîchit périodiquement pour qu'ils restent actifs pendant le port.

Marque d'armure

Ajoute une superposition de motif purement cosmétique sur la texture de l'armure. Les deux clés sont requises si vous incluez la section trim.

trim:
  material: GOLD         # Couleur de la marque (GOLD, IRON, DIAMOND, NETHERITE, etc.)
  pattern: WAVY          # Motif de marque (SENTRY, DUNE, COAST, WILD, WARD, EYE, VEX, TIDE,
                         # SNOUT, RIB, SPIRE, SILENCE, FLOW, BOLT, WAVY, SHAPER, RAISER, HOST)

Équipable (Modèle 3D porté)

La section equippable définit un modèle 3D qui apparaît sur le corps du joueur quand il porte l'armure. Nécessite des clients Minecraft 1.21.4+.

equippable:
  model: "my_pack:dragon_armor"               # Emplacement de ressource du modèle équipable
  equip_sound: "minecraft:item.armor.equip_diamond"  # Son lors de l'équipement
Quand on utilise pack_id, les valeurs equippable.model et equippable.equip_sound de l'élément de pack sont utilisées par défaut. La section equippable dans armors.yml surcharge ces valeurs.

Exemple complet

custom_armors:
  dragon_helmet:
    pack_id: "my_pack:dragon_helmet"   # Tire matériau + CMD de PackManager

    display_name: "&4&lDragon Helmet"
    lore:
      - "&7Forged from dragonscale."
      - "&8+4 Max Health | +3 Armor"

    attributes:
      - attribute: GENERIC_MAX_HEALTH
        amount: 4.0
        operation: ADD_NUMBER        # +2 cœurs supplémentaires
      - attribute: GENERIC_ARMOR
        amount: 3.0
        operation: ADD_NUMBER

    potion_effects:
      - effect: fire_resistance
        duration: 999999             # Permanent pendant le port
        amplifier: 0                 # Niveau I
      - effect: night_vision
        duration: 999999
        amplifier: 0

    trim:
      material: GOLD
      pattern: WAVY

    equippable:
      model: "my_pack:dragon_armor"
      equip_sound: "minecraft:item.armor.equip_diamond"

Blocs personnalisés — Côté gameplay

Ce fichier contrôle tout ce qui se passe quand un bloc personnalisé est placé ou miné — dureté, résistance aux explosions, drops, outils requis, émission de lumière, nom d'affichage, description, sons, particules et XP Jobs. C'est le complément de packs/blocks.yml qui gère uniquement les textures.

Fichiers : CustomiZe!/your_pack/blocks.yml (par pack, recommandé) ou CustomiZe!/__global__/blocks.yml (global)

La règle des deux fichiers (rappel rapide)

packs/your_pack/configs/blocks.ymlCustomiZe!/your_pack/blocks.yml
Texture, ID de modèle, type de placement, sons de casseNom d'affichage, description, dureté, blast_resistance, break_with, drops, niveau de lumière, particules, récompenses XP
Toutes les propriétés de gameplay — y compris hardness et blast_resistance — appartiennent à CustomiZe!. Le dossier packs/ est strictement pour les visuels.

Configuration complète de bloc

Voici un exemple complet montrant chaque option disponible pour un bloc. N'utilisez que les champs dont vous avez besoin — la plupart sont optionnels.

# CustomiZe!/my_pack/blocks.yml

blocks:
  silver_ore:
    # Lie cette entrée à packs/my_pack/configs/blocks.yml → silver_ore
    # Format : "namespace:item_key"  (namespace = valeur info.namespace du pack)
    pack_id: "my_pack:silver_ore"

    # Nom d'affichage riche montré dans la description et les messages de casse.
    # Supporte les balises MiniMessage (dégradés, couleurs, gras, etc.)
    display_name: "Silver Ore"

    # Lignes de description affichées quand le bloc est dans la main du joueur.
    lore:
      - "A pale metallic ore."
      - "Drops Raw Silver when mined."

    # Temps de minage — reflète les valeurs de dureté vanilla.
    # Plus élevé = plus lent à miner. Omis = utilise le timing vanilla NOTE_BLOCK (très rapide).
    # Référence : stone=1.5, iron_ore=3.0, deepslate_ore=4.5, obsidian=50.0
    hardness: 3.0

    # Résistance aux explosions. Les blocs avec cette valeur sont entièrement protégés
    # de la TNT, des creepers et autres explosions. Omis = permet la destruction.
    blast_resistance: 3.0

    # Niveau d'émission de lumière (0 = pas de lumière, 15 = lumière niveau torche).
    # Quand supérieur à 0, le serveur place un bloc LIGHT caché pour que la vraie
    # lumière se propage. Les joueurs voient toujours la texture du minerai, pas le bloc de lumière.
    light_level: 8

    # Si le bloc drop son propre objet quand cassé.
    # false = utiliser la liste de drops ci-dessous (recommandé pour les minerais)
    # true  = l'objet bloc lui-même drop (bon pour les blocs décoratifs)
    drop_self: false

    # ── Quels outils peuvent casser ce bloc ──────────────────────────────────
    # Listez les noms de matériaux vanilla et/ou les IDs de pioches personnalisées de pickaxes.yml.
    # Omettez cette clé → n'importe quel outil fonctionne (y compris la main nue).
    # Définissez à une liste vide [] → complètement indestructible en survie.
    break_with:
      - IRON_PICKAXE
      - GOLDEN_PICKAXE
      - DIAMOND_PICKAXE
      - NETHERITE_PICKAXE
      - silver_lithium_pickaxe    # Une clé de pioche personnalisée de CustomiZe!/pickaxes.yml

    # ── Ce que le bloc drop quand cassé ──────────────────────────────────
    # Plusieurs drops sont tous lancés indépendamment (chacun a sa propre chance).
    drops:
      # type: plugin_item — un objet personnalisé défini dans CustomiZe!/items.yml
      - type: plugin_item
        item: "my_pack:raw_silver"   # format : "pack_namespace:item_key"
        amount: 1                     # montant exact
        chance: 100                   # 100 = drop toujours

      # Utilisez amount_min / amount_max pour une plage aléatoire :
      - type: plugin_item
        item: "my_pack:silver_shard"
        amount_min: 0
        amount_max: 2
        chance: 40                    # 40% de chance de dropper 0–2 éclats

      # type: vanilla — tout nom de matériau Bukkit standard
      - type: vanilla
        item: EXPERIENCE_BOTTLE
        amount_min: 1
        amount_max: 1
        chance: 20                    # 20% de chance

      # type: command — exécute une commande console quand ce bloc est cassé
      # %player% est remplacé par le nom du casseur
      - type: command
        command: "eco give %player% 5"
        chance: 50                    # 50% de chance de donner 5 pièces

    # Son optionnel joué au casseur quand le bloc est miné.
    # Utilisez n'importe quelle clé de son Minecraft (complétion auto avec /playsound).
    soundeffectonmined: "block.amethyst_block.break"

    # Effet de particule optionnel affiché quand le bloc est miné.
    # Utilisez n'importe quel nom d'enum Bukkit Particle.
    visualeffectonmined: "VILLAGER_HAPPY"


  # ── Exemple de bloc décoratif (drop_self: true) ──────────────────────────
  oak_beam:
    pack_id: "my_pack:oak_beam"
    display_name: "&fOak Beam"
    lore:
      - "&7A decorative oak wood beam."
    hardness: 2.0            # Mine à la vitesse des bûches
    blast_resistance: 2.0
    drop_self: true          # Drop l'objet bloc lui-même (pas besoin de liste de drops)
    break_with:
      - HAND                 # Peut être cassé à la main nue
      - WOODEN_AXE
      - STONE_AXE
      - IRON_AXE
      - GOLDEN_AXE
      - DIAMOND_AXE
      - NETHERITE_AXE


# ── Récompenses XP et argent ─────────────────────────────────────────────────────
# Fonctionne pour VOS blocs de pack personnalisés ET les blocs Minecraft vanilla.
# Ajoutez cette section n'importe où dans le fichier (ou dans __global__/blocks.yml).
xp_values:

  # Bloc personnalisé : utilisez "namespace:item_key" (identique à pack_id ci-dessus)
  my_pack:silver_ore:
    name: "Silver Ore"
    jobsxp: 8.0              # XP donné au job du plugin Jobs
    job: "Miner"             # Le nom du job Jobs (doit correspondre à votre config jobs)
    money: 5.0               # Argent économique Vault donné au joueur
    points: 2.0              # Points de serveur / monnaie personnalisée
    cancel-vanilla-drops: false   # true = arrête les drops vanilla (utile pour les minerais personnalisés)

  # Bloc vanilla : utilisez le nom de matériau Bukkit
  COAL_ORE:
    name: "Coal Ore"
    jobsxp: 2.0
    job: "Miner"
    money: 1.0
    points: 0.5
    cancel-vanilla-drops: false

Tous les champs en un coup d'œil

ChampRequis ?Description
pack_idrequisLie à l'entrée packs/. Format : "namespace:item_key"
display_nameoptionnelNom d'affichage MiniMessage dans les messages de casse et la description
loreoptionnelListe de lignes de description sur l'objet bloc
hardnessoptionnelTemps de minage. stone≈1.5, iron_ore≈3.0, deepslate≈4.5, obsidian≈50. Omis = instantané (vitesse vanilla NOTE_BLOCK)
blast_resistanceoptionnelQuand défini, le bloc est entièrement protégé des explosions. Omis = peut être soufflé
light_leveloptionnelÉmission de lumière 0–15. Utilise un bloc LIGHT caché côté serveur
drop_selfoptionneltrue = drop son propre objet bloc. false = utiliser la liste drops
break_withoptionnelListe de matériaux d'outils + IDs de pioches personnalisées. Omis = n'importe quel outil. [] = indestructible
dropsoptionnelListe d'entrées de drop. Chacune a type, item, amount/amount_min/amount_max, chance
soundeffectonminedoptionnelClé de son Minecraft jouée au casseur lors de la casse
visualeffectonminedoptionnelNom d'enum Bukkit Particle affiché lors de la casse
iscaveblockoptionnelConfiguration CaveBlock spéciale (voir la section CaveBlock)

Types de drops

typeFormat de valeur itemExemple
plugin_item"pack_namespace:item_key"Un objet personnalisé configuré dans CustomiZe!/items.yml
vanillaNom de matériau BukkitDIAMOND, EXPERIENCE_BOTTLE, IRON_INGOT
commandChaîne de commande console (%player% est remplacé)"eco give %player% 50"
Les drops multiples se cumulent. Toutes les entrées de drop sont lancées indépendamment. Un bloc peut simultanément essayer de dropper un minerai brut (100% de chance), des éclats bonus (40% de chance), et exécuter une commande économique (25% de chance) — chaque lancer se passe séparément à chaque casse.

Pioches personnalisées

Pioches qui montent de niveau quand les joueurs minent — chaque niveau débloque de nouvelles textures, un minage en zone et des effets de Hâte.

Fichier : CustomiZe!/__global__/pickaxes.yml

Comment fonctionne la progression des pioches

Chaque pioche suit combien de blocs le joueur a minés avec elle. Quand le compte atteint blocks_required pour le niveau actuel, la pioche se met automatiquement à niveau. L'amélioration :

  • Change le Custom Model Data → nouvelle texture apparaît
  • Augmente la durabilité, le rayon de minage et le niveau d'effet
  • Met à jour la description pour afficher les nouvelles statistiques
  • Notifie le joueur

Exemple de configuration complète

pickaxes:
  tier_pickaxe:
    type: DIAMOND_PICKAXE
    display_name: "⛏ Tier Pickaxe"
    lore:
      - "⛏ Level: %level% / %max_level%"
      - "Blocks mined: %blocks_mined% / %blocks_required%"
      - "Durability: %current_durability% / %max_durability%"
      - "Mining area: %radius%×%radius%"
      - "%bonuses%"

    levels:
      # Niveau 1 — Tier de départ
      1:
        name: "⛏ Tier Pickaxe [Lvl. 1]"
        custom_model_data: 30041        # Texture pour le niveau 1 (aspect bois)
        durability: 2000
        radius: 1                       # Mine 1×1 (juste le bloc sur lequel vous cliquez)
        height_radius: 0                # 0 = seulement le niveau de hauteur exact miné
        effect_on_hold: haste
        effect_amplifier: 0             # 0 = Hâte I
        blocks_required: 200            # Minez 200 blocs pour atteindre le niveau 2
        bonus:
          - "• Haste I while held"

      # Niveau 2
      2:
        name: "⛏ Tier Pickaxe [Lvl. 2]"
        custom_model_data: 30042        # Nouvelle texture (aspect pierre)
        durability: 4000
        radius: 1
        height_radius: 1               # Mine 1 bloc au-dessus et en-dessous aussi (3 de hauteur)
        effect_on_hold: haste
        effect_amplifier: 0
        blocks_required: 500
        bonus:
          - "• Haste I while held"
          - "• 1×3 column mining"

      # Niveau 3
      3:
        name: "⛏ Tier Pickaxe [Lvl. 3]"
        custom_model_data: 30043        # Nouvelle texture (aspect fer)
        durability: 7000
        radius: 3                       # Mine une zone 3×3
        height_radius: 1
        effect_on_hold: haste
        effect_amplifier: 1             # Hâte II
        blocks_required: 1000
        bonus:
          - "• Haste II while held"
          - "• 3×3 area mining"

      # Niveau 4 — Tier final
      4:
        name: "⛏ Tier Pickaxe [Lvl. 4]"
        custom_model_data: 30044        # Nouvelle texture (aspect diamant/netherite)
        durability: 12000
        radius: 3
        height_radius: 3               # Mine une zone de 3×7 de hauteur
        effect_on_hold: haste
        effect_amplifier: 1
        blocks_required: 0             # 0 = NIVEAU MAX, pas d'amélioration supplémentaire
        bonus:
          - "• Haste II while held"
          - "• 3×7 area mining"
          - "• MAX LEVEL"

Toutes les clés de configuration par niveau

CléTypeRequis ?DéfautDescription
nameChaîneOptionnelNom d'affichage à ce niveau. Supporte MiniMessage.
loreListe<Chaîne>OptionnelLignes de description à ce niveau. Supporte tous les placeholders ci-dessous.
custom_model_dataEntierOptionnel0CMD pour la texture à ce niveau.
pack_idChaîneOptionnelSurcharge d'élément de pack par niveau (format : packName:itemId).
durabilityEntierOptionnelMax du matériauDurabilité personnalisée pour ce niveau. Le plugin la suit indépendamment des dégâts vanilla.
blocks_requiredEntierOptionnel0Blocs à miner pour passer au niveau suivant. Définissez à 0 sur le dernier niveau — cela signale que c'est le niveau maximum.
radiusEntierOptionnel1Rayon de minage horizontal. 1 = 1×1 (bloc unique), 3 = zone 3×3.
height_radiusEntierOptionnel0Rayon de minage vertical. 0 = seulement le bloc exact, 1 = un bloc au-dessus et en-dessous (3 de hauteur), 3 = 7 de hauteur.
two_blocksBooléenOptionnelfalseRaccourci pour height_radius: 1. Définissez à true pour miner 1×3 (un bloc au-dessus + en-dessous de la cible).
down_depthEntierOptionnel0Profondeur de colonne minée vers le bas depuis le bloc cliqué. Utile pour les houes ou pioches de puits.
effect_on_holdChaîneOptionnelType d'effet de potion appliqué quand cette pioche est tenue en main principale (ex. haste, speed).
effect_amplifierEntierOptionnel0Amplificateur d'effet. 0 = Niveau I, 1 = Niveau II.
bonusListe<Chaîne>OptionnelLignes de saveur affichées via le placeholder de description %bonuses% à ce niveau.

Placeholders de description

PlaceholderAffiche
%level%Numéro de niveau actuel
%max_level%Niveau le plus élevé défini
%blocks_mined%Blocs minés vers le prochain niveau
%blocks_required%Blocs nécessaires pour le prochain niveau (0 au max)
%total_blocks%Blocs minés de tous les temps avec cette pioche
%current_durability%Durabilité personnalisée restante
%max_durability%Durabilité maximale au niveau actuel
%radius%Numéro du rayon de minage horizontal (ex. 3 pour 3×3)
%height_radius%Numéro du rayon de minage vertical
%down_depth%Profondeur de colonne minée vers le bas
%bonuses%Toutes les lignes de bonus pour le niveau actuel (multi-lignes)

Houes moissonneuses

Houes à récolte automatique et replantation automatique avec un système de niveaux basé sur l'XP, des tables de drops personnalisées et une vente automatique via l'économie Vault. Le système de niveaux est intégré.

Fichier : CustomiZe!/__global__/harvesterhoes.yml

Comment fonctionnent les houes moissonneuses

Quand un joueur fait un clic droit sur une culture avec une houe moissonneuse configurée, le plugin :

  1. Vérifie si le type de culture est dans supported-crops pour cette houe
  2. Récolte la culture et drop optionnellement des objets personnalisés (depuis la table drops)
  3. Si auto-replant est activé, replante la culture à replant-growth-stage
  4. Si auto-sell est activé, dépose de l'argent pour la récolte directement dans la balance du joueur
  5. Accorde de l'XP depuis xp-values et vérifie experience.level-up-requirements pour une montée de niveau
  6. Décrémente uses de 1. Quand les utilisations atteignent 0, la houe se casse.

Clés de houe de niveau supérieur

CléTypeRequis ?Description
base-itemChaîneOptionnelMatériau de houe vanilla. Défaut : WOODEN_HOE. Utilisez n'importe quel type de houe : WOODEN_HOE, STONE_HOE, IRON_HOE, GOLDEN_HOE, DIAMOND_HOE, NETHERITE_HOE.
pack_idChaîneOptionnelFormat : packName:itemId. Si défini, matériau et CMD sont résolus depuis PackManager. Le pack_id par niveau dans les abilities surcharge ceci.
custom-model-dataEntierOptionnelCMD par défaut. Surchargé par le model-data du niveau d'ability actif.
nameChaîneOptionnelNom d'affichage de repli utilisé quand le niveau d'ability actif n'a pas de name. Défaut : "Harvester Hoe".
usesEntierOptionnelNombre d'utilisations de base au niveau-0. Défaut : 10. Multiplié par le use-multiplier de chaque niveau lors d'une montée.
loreListe<Chaîne>OptionnelDescription de repli. Chaque niveau d'ability peut avoir sa propre lore qui surcharge celle-ci.
supported-cropsListe<Chaîne>RequisTypes de blocs de culture vanilla que cette houe peut récolter. Voir la liste ci-dessous.
xp-valuesSectionOptionnelXP accordé par type de culture récoltée. La clé est le nom de matériau, la valeur est le montant XP. La clé spéciale CUSTOM_CROP couvre les cultures personnalisées. Défaut : 1 par récolte.
dropsSectionOptionnelTable de drops personnalisée par type de culture. Si défini, surcharge les drops vanilla. Si non défini, les drops vanilla sont utilisés.
experienceSectionOptionnelConfiguration des seuils XP pour la montée de niveau. Requis uniquement si vous voulez des niveaux.
abilitiesSectionRequisConfiguration des capacités par niveau. Doit contenir au moins level-0.

Cultures supportées (supported-crops)

Utilisez les noms de matériaux de blocs Minecraft vanilla :

Nom du matériauCulture
WHEATPlants de blé
CARROTSPlants de carottes
POTATOESPlants de pommes de terre
BEETROOTSPlants de betteraves
NETHER_WARTVerrue du Nether
MELON_STEMTige de melon (la tige en croissance)
PUMPKIN_STEMTige de citrouille
COCOAFèves de cacao
SWEET_BERRY_BUSHBuissons de baies sucrées
Tout autre bloc de cultureTout bloc de culture vanilla entièrement développé
La houe récolte uniquement les cultures à leur stade de croissance maximum. Les cultures immatures sont ignorées et laissées à continuer de pousser.

Capacités (système de niveaux)

La section abilities est là où vit le système de niveaux. Chaque sous-clé est un nom de niveau (ex. level-0, level-1). level-0 est l'état de départ quand la houe est créée. Le plugin monte au prochain nom de niveau quand les seuils XP sont atteints.

Clés de capacité par niveau

CléTypeRequis ?Description
nameChaîneOptionnelNom d'affichage pour la houe à ce niveau. Supporte MiniMessage.
loreListe<Chaîne>OptionnelLignes de description pour ce niveau. Utilisez <uses> pour les utilisations restantes.
model-dataEntierOptionnelCustom Model Data à ce niveau. Permet à la texture de changer par niveau.
pack_idChaîneOptionnelSurcharge d'élément de pack par niveau (format : packName:itemId). Surcharge le pack_id de niveau supérieur.
use-multiplierEntierOptionnelLors de la montée de niveau, nouvelles utilisations = base_uses × use-multiplier. Défaut : 1 (pas de changement). Définissez à 2 pour doubler les utilisations à ce niveau.
drop-multiplierEntierOptionnelMultiplie la quantité de drops de la table drops. Défaut : 1. Définissez à 2 pour des drops doubles.
auto-sellBooléenOptionnelSi true, les cultures récoltées sont automatiquement vendues contre de l'argent via Vault au lieu de tomber au sol. Défaut : false.
auto-replantBooléenOptionnelSi true, la culture est automatiquement replantée après la récolte. Défaut : false.
replant-growth-stageEntierOptionnelLe stade de croissance auquel la culture est réinitialisée après replantation. Défaut : 0 (stade de graine). Utilisez des valeurs plus élevées pour sauter les premiers stades de croissance.

Montée de niveau XP (experience)

La section experience.level-up-requirements mappe les noms de niveaux aux totaux XP cumulatifs. Quand l'XP accumulé du joueur atteint le seuil, la houe monte automatiquement à ce niveau :

experience:
  level-up-requirements:
    level-1: 100     # Atteindre 100 XP → monter au level-1
    level-2: 300     # Atteindre 300 XP total → monter au level-2
    level-3: 600     # Atteindre 600 XP total → monter au level-3

L'XP est gagné par récolte. Le montant provient de xp-values :

xp-values:
  WHEAT: 5           # +5 XP par blé récolté
  CARROTS: 7         # +7 XP par carotte
  POTATOES: 6        # +6 XP par pomme de terre
  CUSTOM_CROP: 3     # XP pour toute culture personnalisée (du système de cultures de CustomiZer)
Si un type de culture n'est pas dans xp-values, l'XP par défaut est 1 par récolte. Vous n'avez pas besoin de lister chaque culture — seulement celles pour lesquelles vous voulez un XP personnalisé.

Table de drops personnalisée (drops)

Définit quels objets droppent quand une culture est récoltée. Organisée par matériau de culture → entrées de drop nommées :

drops:
  WHEAT:                          # Type de culture
    wheat_item:                   # N'importe quelle clé unique pour cette entrée de drop
      item: WHEAT                 # Nom de matériau vanilla OU mappage vanilla
      chance: 1.0                 # Probabilité 0.0–1.0 (1.0 = 100%)
      quantity: 1                 # Combien dropper
    seeds:
      item: WHEAT_SEEDS           # Graines de blé comme drop bonus
      chance: 0.5                 # 50% de chance
      quantity: 2

  CARROTS:
    carrot_drop:
      item: CARROT                # Note : le plugin mappe automatiquement le bloc CARROTS → objet CARROT
      chance: 1.0
      quantity: 1
    bonus_carrot:
      item: CARROT
      chance: 0.3
      quantity: 3
Le plugin mappe automatiquement les noms de blocs de culture à leurs équivalents d'objets : CARROTSCARROT, POTATOESPOTATO, BEETROOTSBEETROOT. Utilisez le nom d'objet dans le champ item:.

Prix de vente automatique (economy)

Requis si un niveau de capacité a auto-sell: true. Le prix est par unité, multiplié par le drop-multiplier du niveau actuel :

economy:
  sell-prices:
    WHEAT: 50.0        # 50 pièces par blé
    CARROTS: 75.0
    POTATOES: 60.0
    BEETROOTS: 45.0

Messages

Toutes les clés de message sont optionnelles. Si non défini, aucun message n'est envoyé pour cet événement.

CléPlaceholders disponiblesQuand affiché
messages.exp-gain{amount}, {total}, {hoe}Après chaque récolte qui accorde de l'XP
messages.level-up{level}, {hoe}Quand la houe monte de niveau
messages.auto-sell{amount}, {item}Quand les cultures sont auto-vendues

Placeholders de description

Un seul placeholder spécial existe pour la description de houe :

PlaceholderFormatRemplacé par
<uses>Crochets angulairesUtilisations restantes avant que la houe se casse
Le format du placeholder est <uses> avec des crochets angulaires — pas le format avec signe pourcent utilisé par les épées et pioches. C'est intentionnel.

Exemple complet

hoes:
  harvest_hoe:
    base-item: GOLDEN_HOE
    custom-model-data: 10000        # CMD de départ (le CMD level-0 surcharge ceci)
    name: "🌾 Harvest Hoe"
    uses: 100                       # Utilisations de base au niveau-0

    supported-crops:
      - WHEAT
      - CARROTS
      - POTATOES
      - BEETROOTS

    xp-values:
      WHEAT: 5
      CARROTS: 7
      POTATOES: 6
      BEETROOTS: 4

    experience:
      level-up-requirements:
        level-1: 100
        level-2: 300
        level-3: 700

    drops:
      WHEAT:
        wheat:
          item: WHEAT
          chance: 1.0
          quantity: 1
        seeds:
          item: WHEAT_SEEDS
          chance: 0.4
          quantity: 1

    abilities:
      level-0:
        name: "&7🌾 Harvest Hoe [Lv.0]"
        lore:
          - "&8Uses: &f<uses>"
          - "&7Harvest crops automatically."
        model-data: 10000
        use-multiplier: 1
        drop-multiplier: 1
        auto-sell: false
        auto-replant: true
        replant-growth-stage: 0

      level-1:
        name: "&a🌾 Harvest Hoe [Lv.1]"
        lore:
          - "&8Uses: &f<uses>"
          - "&7+50% drops | Auto-replant"
        model-data: 10001           # Nouvelle texture
        use-multiplier: 2           # 100 × 2 = 200 utilisations à ce niveau
        drop-multiplier: 2          # 50% de drops en plus (entier, double effectivement)
        auto-sell: false
        auto-replant: true

      level-2:
        name: "&6🌾 Harvest Hoe [Lv.2]"
        lore:
          - "&8Uses: &f<uses>"
          - "&7Auto-sell enabled | Double drops"
        model-data: 10002
        use-multiplier: 3           # 100 × 3 = 300 utilisations
        drop-multiplier: 2
        auto-sell: true             # Cultures vendues directement dans le portefeuille
        auto-replant: true

economy:
  sell-prices:
    WHEAT: 50.0
    CARROTS: 75.0
    POTATOES: 60.0
    BEETROOTS: 45.0

messages:
  exp-gain: "&aGained &f{amount} &aXP! &8Total: &f{total}"
  level-up: "&6🎉 Your {hoe} levelled up to &e{level}&6!"
  auto-sell: "&aAuto-sold crops for &6{amount} coins."

Cosmétiques

Objets décoratifs portables — chapeaux, objets de dos, ailes — que les joueurs peuvent équiper sans remplacer leur armure.

Fichier : CustomiZe!/__global__/cosmetics.yml
cosmetics:
  cool_hat:
    pack_id: "my_pack:cool_hat"      # Référence l'élément de pack pour la texture
    display_name: "✦ Cool Hat"
    slot: hat                         # Où équiper : hat | back | wings | offhand
    lore:
      - "A very stylish hat."
      - "Right-click to equip or swap!"
    permission: "myserver.hats.cool"  # Optionnel — seuls les joueurs avec cette perm peuvent l'utiliser

  angel_wings:
    pack_id: "my_pack:angel_wings"
    display_name: "🪶 Angel Wings"
    slot: back
EmplacementPosition d'inventaireUtilisation
hatEmplacement TÊTEChapeaux, couronnes, casques
backEmplacement PLASTRONCapes, sacs à dos, ailes
wingsEmplacement PLASTRONAlias pour back
offhandEmplacement MAIN_SECONDAIRECosmétiques portés

Sacs à dos

Objets sac à dos physiques qui ouvrent un inventaire persistant. L'inventaire est lié à l'objet, pas au joueur — échangez le sac à dos pour transférer tout son contenu.

Fichier : CustomiZe!/<pack>/backpacks.yml

Comment ça fonctionne

  • Chaque objet sac à dos reçoit un UUID unique marqué dans son PDC (customizer:backpack_instance_uuid) lors de l'attribution.
  • L'inventaire est stocké par cet UUID (SQLite ou MongoDB) — donc deux sacs à dos du même type ont des inventaires séparés.
  • Les joueurs exécutent /backpack en tenant le sac à dos dans leur main secondaire (ou en le portant sur le plastron) pour l'ouvrir.
  • Les hoppers et plugins ne peuvent pas déplacer des objets vers ou depuis un inventaire de sac à dos ouvert.
storage:
  type: sqlite          # "sqlite" ou "mongodb"
  sqlite:
    file: db/backpacks.db  # stocké dans plugins/CustomiZer/db/

backpacks:
  adventure_backpack_1:
    pack_id: "elitecreatures:adventure_backpack_cosmetic_backpack_1"
    display_name: "<gold><bold>🎒 Adventure Backpack I"
    slots: 18           # 9, 18, 27, 36, 45, ou 54  (ou utilisez rows: 1-6)
    permission: "myserver.backpack.tier1"   # optionnel
    lore:
      - "<dark_gray>18 emplacements"
      - "<gray>Portez sur la poitrine ou tenez en main secondaire, exécutez <yellow>/backpack"

  large_backpack:
    pack_id: "elitecreatures:large_backpack"
    display_name: "<green>🎒 Large Backpack"
    rows: 4             # équivalent à slots: 36
CléDéfautDescription
pack_idrequisL'ID d'élément de pack CustomiZer qui fournit la texture/le modèle.
display_namerequisTitre MiniMessage affiché dans l'inventaire et sur l'objet.
slots27Emplacements totaux — doit être un multiple de 9, max 54. Utilisez alternativement rows: 1–6.
permissionaucuneSi défini, seuls les joueurs avec cette permission peuvent ouvrir le sac à dos.
loreaucuneListe de lignes de description MiniMessage ajoutées à l'objet.

Donner des sacs à dos

Ajoutez le sac à dos comme entrée type: backpack dans votre gui.yml — il apparaîtra dans /zitems et cliquer dessus donne l'objet physique (avec UUID marqué et description appliquée) :

items:
  - type: backpack
    pack: elitecreatures
    id: adventure_backpack_cosmetic_backpack_1
    name: "<gold><bold>🎒 Adventure Backpack I"
    lore:
      - "<dark_gray>18 emplacements"
      - "<gray>Tenez en main secondaire → /backpack"

Backends de stockage

TypeClé de configNotes
SQLitetype: sqlitePar défaut. Fichier unique, aucune configuration. Convient à la plupart des serveurs.
MongoDBtype: mongodbMeilleur pour de très grands nombres de joueurs ou des clusters partagés. Nécessite une sous-section mongodb: avec uri, database, et collection.

Emplacements de gemmes

Un système d'emplacements où les joueurs insèrent des gemmes dans les armes et armures pour des bonus de statistiques qui s'usent avec le temps.

Fichiers : CustomiZe!/__global__/gems.yml  ·  par pack : CustomiZe!/<pack>/gems.yml

Exemple — Steve insère une 🔥 Rune de Feu dans son épée

Un guide complet de la façon dont un joueur utilise /zsocket du début à la fin. La Rune de Feu ajoute +2.5 Dégâts d'attaque, elle va donc dans une arme.

Les gemmes fonctionnent dans tout objet avec emplacement — armure, armes, outils. La statistique s'applique à chaque fois que l'objet est équipé dans n'importe quel emplacement. Une rune de feu dans une armure donne toujours +2.5 dégâts d'attaque, mais c'est plus thématiquement logique dans une épée.
1

Steve a une 🔥 Rune de Feu dans son inventaire

Il l'a obtenue d'une récompense de pack ou avec /z give weekly_dot1 fire_rune. En la survolant, on voit :

🔥 Fire Rune
Tier: Awakened
+2.5 Attack Damage when socketed.
Scorched with ancient flame.
────────────
Max Uses: 100
2

Steve exécute /zsocket

🧑
/zsocket

La Station de Socket de Gemmes s'ouvre. La moitié supérieure est l'interface de socket ; la moitié inférieure est son sac de gemmes personnel montrant chaque gemme actuellement dans son inventaire.

3

Steve fait glisser son épée dans l'emplacement cible central

Il prend son épée depuis son inventaire et la dépose dans l'emplacement 4 (l'emplacement supérieur central). Un administrateur avait déjà ajouté 1 socket avec /zsocket add 1.

⬡ Gem Socket Station
⚔️
✂️
── Vos Gemmes ──
🔥
📖

L'épée a 1 socket — elle brille en vert. Les sockets 2–4 sont en rouge (verrouillés). La 🔥 Rune de Feu apparaît dans le sac de gemmes ci-dessous car elle est dans l'inventaire de Steve.

4

Steve clique sur la 🔥 Rune de Feu dans le sac de gemmes

🧑
*clique sur la Rune de Feu*

Le plugin supprime la gemme de son inventaire, l'insère dans le Socket 1, et applique immédiatement +2.5 Dégâts d'attaque comme modificateur d'attribut sur l'épée. Le chat confirme :

Gem socketed into slot 1!
5

Le GUI se met à jour — le socket 1 affiche maintenant la gemme avec 100 utilisations

⬡ Gem Socket Station
⚔️
🔥100
✂️
── Vos Gemmes ──
📖

Survoler le Socket 1 affiche :

🔥 Fire Rune
Tier: Awakened
+2.5 Attack Damage when socketed.
────────────
⬡ Socketed in Slot 1
Uses remaining: 100
Durability: 100 uses
Click to extract (gem is destroyed)
6

Steve ferme le GUI et tient son épée

L'épée est retournée dans son inventaire à la fermeture. Sa description et l'info-bulle d'attribut Minecraft affichent maintenant le bonus :

Iron Sword
────────────
🔥 Fire Rune (100 uses)
────────────
When in Main Hand:
+2.5 Attack Damage (Fire Rune)
+7 Attack Damage (base iron sword)

Toutes les 60 secondes pendant que l'épée est tenue ou équipée, la Rune de Feu perd 1 utilisation. À 0 utilisations, la gemme s'effrite, le +2.5 de dégâts est supprimé, et Steve voit :

⬡ A gem has worn out and crumbled from your item!

Le temps ne s'écoule pas quand l'objet se trouve dans le GUI de la Station de Socket.

Admin : Utilisez /zsocket add <count> (nécessite cxp.socket.add) en tenant un objet pour ajouter des emplacements de socket. Partagez ensuite l'objet avec les joueurs — ils utilisent /zsocket pour ouvrir le GUI et insérer leurs propres gemmes.

Référence de configuration

socket_char: "◈"
empty_socket_lore: "◈ Empty Socket"
max_sockets: 4

# Utilisations par défaut pour les gemmes qui ne définissent pas les leurs. -1 = illimité.
default_max_uses: -1

gem_decay:
  enabled: true
  interval_seconds: 60   # 1 utilisation consommée par minute de temps équipé

gems:
  water_rune:
    display_name: "💧 Water Rune"
    type: PAPER
    model_data: 200377
    tier: 2
    stat: armor
    value: 1.5
    max_uses: 100          # -1 pour illimité
    lore:
      - "Tier: Awakened"
      - "+1.5 Armor when socketed."
Valeur statEffet
attack_damageDégâts d'attaque plats (+1.5 = 1.5 dégâts de plus)
armorPoints d'armure (1.0 = une demi-pip d'armure)
armor_toughnessRéduit la pénétration d'armure
movement_speedMultiplicateur de vitesse (0.01 ≈ 1%)
max_healthCœurs supplémentaires (2.0 = 1 cœur plein)
luckAttribut de chance vanilla

Sets d'armures

Équipez N pièces d'armure correspondantes pour débloquer des bonus — effets de potion, commandes console et messages. Les bonus s'activent et se désactivent automatiquement quand les pièces sont équipées ou retirées.

Fichier : CustomiZe!/__global__/sets.yml

Comment fonctionnent les sets

Chaque pièce d'armure enregistrée dans armors.yml a une clé unique (ex. dragon_helmet). Le fichier sets.yml regroupe ces clés en sets et définit ce qui se passe à chaque seuil (2 pièces équipées, 3 pièces, 4 pièces, etc.).

Chaque fois qu'un joueur équipe ou retire une armure, le plugin :

  1. Compte combien de pièces de chaque set le joueur a équipé
  2. Compare le nouveau compte au précédent
  3. Si le compte a dépassé un seuil vers le haut → applique des effets, exécute des commandes, envoie le message d'activation
  4. Si le compte a dépassé un seuil vers le bas → supprime les effets, envoie le message de désactivation

Clés de configuration

CléTypeRequis ?Description
sets.{id}.piecesListe<Chaîne>RequisClés de pièces d'armure de armors.yml qui forment ce set. Le plugin compte combien de celles-ci le joueur porte.
sets.{id}.bonusesSectionOptionnelMap de seuil de nombre de pièces → config de bonus. La clé est une chaîne numérique : "2", "3", ou "4".
bonuses.{N}.messageChaîneOptionnelEnvoyé au joueur quand il passe ce seuil (vers le haut ou le bas). Supporte MiniMessage.
bonuses.{N}.potion_effectsListe<Map>OptionnelEffets de potion appliqués quand le seuil est dépassé vers le haut. Supprimés quand dépassé vers le bas.
bonuses.{N}.commandsListe<Chaîne>OptionnelCommandes console exécutées quand le seuil est dépassé vers le haut. Utilisez {player} pour le nom du joueur.

Clés de map d'effet de potion

CléTypeDescription
effectChaîneClé de registre Bukkit PotionEffectType (ex. strength, fire_resistance, speed, regeneration, resistance)
durationEntier (ticks)Durée de l'effet. Utilisez 999999 pour effectivement permanent pendant que le set est porté.
amplifierEntier0 = Niveau I, 1 = Niveau II, 2 = Niveau III
Vous pouvez mélanger effets de potion et commandes dans le même bonus. Les effets sont appliqués directement par le plugin ; les commandes sont exécutées comme console donc vous pouvez déclencher n'importe quoi — donner des objets, exécuter des commandes économiques, ajouter des permissions, etc.
Les commandes s'exécutent uniquement quand le seuil est dépassé vers le haut (gagner des pièces). Elles ne s'annulent PAS automatiquement quand des pièces sont retirées — pour des bonus réversibles, utilisez potion_effects à la place, que le plugin supprime automatiquement.

Exemple complet

sets:
  dragon:
    pieces:
      - dragon_helmet
      - dragon_chestplate
      - dragon_leggings
      - dragon_boots

    bonuses:
      "2":                                         # Porter 2 pièces sur 4
        message: "&c&l★ 2-Piece Dragon: &fStrength I active!"
        potion_effects:
          - effect: strength
            duration: 999999                       # Permanent pendant le port
            amplifier: 0                           # Force I

      "4":                                         # Bonus de set complet
        message: "&4&l★ Full Dragon Set! &cFire Resistance + Strength II!"
        potion_effects:
          - effect: fire_resistance
            duration: 999999
            amplifier: 0
          - effect: strength
            duration: 999999
            amplifier: 1                           # Force II (surcharge Force I à 2 pièces)
        commands:
          - "broadcast &4{player} &ca assemblé le Dragon Set complet !"

Cultures personnalisées

Cultures persistantes à plusieurs stades avec des modèles générés ou personnalisés, des conditions de croissance configurables, des hitboxes dynamiques, des effets de stade, des tables de loot selon l'âge, des objets de récolte comestibles et des événements de plugin.

Dossier d'exécution : Les packs de cultures sont chargés depuis plugins/CustomiZer/packs/<pack-id>/. L'exemple intégré est plugins/CustomiZer/packs/customcrops/. Une culture est découverte depuis son dossier de modèle ou de texture ; un fichier YAML seul n'enregistre pas une culture.

Ce que fait le système de cultures

  1. Analyse chaque dossier dans plugins/CustomiZer/packs/ pour une disposition de culture Models/ ou Textures/.
  2. Détecte les stades de chaque culture depuis les fichiers de modèle ou de texture correctement nommés.
  3. Attribue des valeurs CustomModelData stables pour la graine et chaque stade. Les attributions sont sauvegardées et réutilisées après les redémarrages.
  4. Crée un objet graine plantable tagué avec l'ID de culture.
  5. Affiche la culture plantée avec un ItemDisplay basé sur des paquets et utilise une entité Interaction invisible comme hitbox cliquable.
  6. Vérifie la croissance toutes les 30 secondes, change le modèle et la hitbox à mesure que l'âge augmente, et sauvegarde les cultures placées à travers les redémarrages.
  7. Lance une table de loot selon l'âge quand la culture est cliquée droit ou cassée.

Cycle de vie de la culture en jeu

Les captures d'écran suivantes montrent le cycle de vie visible complet : planter une graine, pousser à travers les modèles configurés, atteindre le stade final, et casser une tomate mature pour recevoir son drop de tomate configuré.

1. Planter la graine (Âge 0)

Faites un clic droit sur le placement.bottom_block configuré avec la graine taguée de la culture. La graine est consommée en mode Survie et le premier modèle de culture apparaît dans le bloc vide au-dessus.

Une graine de culture personnalisée nouvellement plantée montrant son modèle âge 0 sur de la terre labourée

2. Pousser à travers les stades

À mesure que les vérifications de croissance réussissent, chaque culture avance d'un âge à la fois. Son modèle et sa hitbox cliquable se mettent à jour pour correspondre au nouveau stade. Ce champ d'exemple montre plusieurs cultures personnalisées à différents stades de croissance.

Un champ de cultures personnalisées montrant les stades de croissance précoces et intermédiaires

3. Stade final (prêt à la récolte)

Quand une culture atteint son âge le plus élevé détecté, elle utilise le modèle du stade final. Si ready_effect est configuré, des particules marquent la culture comme mature et continuent d'apparaître à chaque vérification de croissance pendant qu'elle reste prête.

Cultures personnalisées entièrement développées affichant leurs modèles finaux et particules de maturité

Exemple de drop de tomate

Dans cet exemple, le plant de tomate mature mis en évidence correspond à une entrée de loot configurée avec item: "pack:my_farm_pack:tomato" et une condition d'âge au stade final.

Avant la casse

La culture de tomate mature est encore plantée et affiche son modèle final.

Une culture de tomate mature mise en évidence avant d'être cassée

Après la casse

La culture est retirée et l'objet tomate personnalisé configuré drop naturellement à son emplacement.

L'objet tomate personnalisé droppé après avoir cassé la culture de tomate mature
La tomate droppée est contrôlée par l'entrée correspondante sous item_drops:. Son objet, sa plage de quantité, sa chance et les âges de culture autorisés proviennent tous de cette entrée.

Créer un pack de cultures

Créez un dossier de pack et choisissez une des deux dispositions visuelles supportées. Si un pack contient un répertoire Models/, le scanner le préfère et n'analyse pas le répertoire Textures/ de ce pack pour les cultures.

Option A : Textures PNG (Modèles automatiques)

plugins/CustomiZer/packs/my_farm_pack/
├── Textures/
│   └── tomato/
│       ├── tomato_crop_stage0.png
│       ├── tomato_crop_stage1.png
│       └── tomato_crop_stage2.png
└── configs/
    └── tomato.yml

Le modèle exact de texture est <crop-id>_crop_stage<age>.png. CustomiZer génère :

  • Un modèle d'objet graine plat utilisant la texture du stade 0.
  • Un modèle de culture en plans croisés pour chaque stade détecté.
  • Des textures de pack de ressources sous assets/customizer/textures/crop/<crop-id>_<age>.png.

Option B : Modèles JSON pré-construits

plugins/CustomiZer/packs/my_farm_pack/
├── Models/
│   └── tomato/
│       ├── tomato_seed.json
│       ├── tomato_crop_stage_0.json
│       ├── tomato_crop_stage_1.json
│       └── tomato_crop_stage_2.json
├── configs/
│   └── tomato.yml
└── resourcepack/
    └── assets/
        └── my_farm_pack/
            ├── models/
            └── textures/

Le modèle exact de stade est <crop-id>_crop_stage_<age>.json. Le modèle de graine est <crop-id>_seed.json. Les modèles de graine ou de stade manquants utilisent des modèles générés en repli. Le JSON de modèle peut référencer des textures namespacées et des modèles parents ; placez ces assets dans la structure normale resourcepack/assets/ du pack.

Le nombre de stades est déterminé par les fichiers : le numéro de stade le plus élevé détecté devient maxAge. Pour les fichiers 0, 1 et 2, la culture a trois stades visuels et un âge maximum de 2. Gardez les stades continus depuis 0. Le chargeur actuel n'utilise pas growth.max_age pour créer des stades.
Chaque culture réserve 20 emplacements CustomModelData : une graine plus jusqu'à 19 modèles de stade. Par conséquent, les âges de stade supportés sont 0 à 18. Les stades détectés plus élevés sont tronqués.

Éléments de pack pour les récoltes et graines

Si le loot doit dropper un objet de pack texturé, définissez cet objet dans une configuration d'objet de pack normal. L'ID d'objet utilisé par la culture doit correspondre à l'ID sous items:.

# plugins/CustomiZer/packs/my_farm_pack/configs/farm_items.yml
info:
  namespace: my_farm_pack

items:
  tomato:
    display_name: "Tomato"
    resource:
      generate: false
      material: APPLE
      model_path: custom/items/tomato

  tomato_seed:
    display_name: "Tomato Seed"
    resource:
      generate: false
      material: WHEAT_SEEDS
      model_path: custom/items/tomato_seed
Utilisez item: "pack:my_farm_pack:tomato" dans le loot de culture. Le préfixe complet pack:<pack-id>:<item-id> est requis. Pour une graine plantable, utilisez item: "crop_seed" ; cela crée la graine correctement taguée pour la culture actuelle.

Configuration complète de culture

# plugins/CustomiZer/packs/my_farm_pack/configs/tomato.yml
seed:
  id: tomato_seed                    # ID de graine logique ; défaut : tomato_seed
  material: WHEAT_SEEDS              # Matériau de base vanilla de la graine générée plantable

growth:
  max_age: 2                         # Informatif dans le chargeur actuel ; les fichiers déterminent l'âge max
  avg_seconds_per_stage: 120         # Temps cible moyen pour chaque stade
  min_light: 7                       # La croissance se met en pause en dessous de ce niveau de lumière de bloc

placement:
  bottom_block: FARMLAND             # Matériau exact Bukkit qui doit être cliqué droit

hitbox:
  auto_height_step: 0.1              # Hauteur par défaut = max(0.2, step * (age + 1))

# Les hitboxes exactes optionnelles surchargent la taille automatique pour les âges listés
hitboxes:
  "0":
    width: 0.75
    height: 0.25
  "2":
    width: 0.9
    height: 0.8

sounds:
  place: minecraft:item.crop.plant   # Plantation réussie
  break: minecraft:block.crop.break  # Clic gauche ou casse environnementale
  interact: minecraft:block.crop.hit # Récolte au clic droit
  grow: minecraft:block.grass.place  # Optionnel ; chaque augmentation d'âge réussie

loot:
  drop_seed_if_immature: true        # Actuellement stocké mais non utilisé par le lancement de loot
  decrease_age_on_harvest: -1        # -1 supprime la culture ; 0 garde le même âge ; N soustrait N âges

multipliers:
  bonemeal: 0.3                      # Présent dans la config, mais actuellement non utilisé par le code d'interaction
  max_moisture: 0.2                  # +20% dans les biomes de marais, jungle ou forêt
  rain: 0.1                          # +10% pendant une tempête sans tonnerre
  thunderstorm: -0.3                 # -30% pendant le tonnerre
  snow: -0.5                         # -50% dans les biomes de neige, gelés ou de glace

ready_effect:
  particle: HAPPY_VILLAGER           # Nom d'enum Bukkit Particle ; omis = pas de particules de maturité
  count: 6                           # Compte ambiant ; la poussée de maturité utilise count * 3

stage_effects:
  "1":
    particle: COMPOSTER               # Nom d'enum Bukkit Particle
    particle_count: 4                 # Défaut : 5
    sound: minecraft:block.grass.place
  "2":
    particle: CRIMSON_SPORE
    particle_count: 10
    sound: minecraft:entity.experience_orb.pickup

item_drops:
  ripe_tomato:
    item: "pack:my_farm_pack:tomato"
    min_amount: 1
    max_amount: 3
    chance: 1.0
    trigger_min_age: 2
    trigger_max_age: -1
    food:
      nutrition: 3
      saturation: 0.5
      can_always_eat: true
      effects:
        - effect: HASTE
          duration: 120
          amplifier: 0
          chance: 0.3

  immature_seed_return:
    item: "crop_seed"
    min_amount: 1
    max_amount: 1
    chance: 1.0
    trigger_min_age: 0
    trigger_max_age: 1

Référence de configuration

CheminDéfautComportement exact
seed.id<crop-id>_seedID de graine logique utilisé pour faire correspondre cette culture avec la navigation d'élément de pack.
seed.materialWHEAT_SEEDSMatériau vanilla utilisé par la graine plantable générée. Les noms invalides reviennent aux graines de blé.
growth.max_ageValeur détectéeÉcrit dans les configs générées, mais l'âge maximum d'exécution est actuellement détecté depuis le fichier de stade le plus élevé.
growth.avg_seconds_per_stage240Contrôle la probabilité d'avancer d'un âge lors de chaque vérification de croissance de 30 secondes.
growth.min_light9Aucun lancer de croissance ne se produit quand le niveau de lumière de l'emplacement de la culture est inférieur.
placement.bottom_blockFARMLANDLe matériau de bloc exact qui doit être cliqué droit avec la graine taguée. Le bloc au-dessus doit être de l'air.
hitbox.auto_height_step0.1Crée une largeur 0.75 et une hauteur max(0.2, step × (age + 1)) sauf si une surcharge d'âge existe.
hitboxes.<age>.width/heightAutomatiqueSurcharge les deux dimensions de l'entité Interaction cliquable invisible à cet âge exact.
sounds.placePlante de cultureJoué après un placement réussi.
sounds.breakCasse de cultureJoué quand la culture est cassée ou retirée par une casse environnementale.
sounds.interactCoup de cultureJoué après une récolte au clic droit réussie.
sounds.growAucunSon optionnel joué à chaque changement d'âge réussi, en plus d'un son d'effet de stade correspondant.
loot.decrease_age_on_harvest-1-1 supprime la culture. 0 la laisse mature. Une valeur positive soustrait autant d'âges, jamais en dessous de 0.
loot.drop_seed_if_immaturetrueChargé par la définition de culture, mais le gestionnaire de loot actuel n'agit pas dessus. Configurez plutôt un drop crop_seed limité par âge explicite.
ready_effectAucunÀ maturité, produit une poussée triple-count, puis le count normal toutes les 30 secondes pendant la maturité.
stage_effects.<age>AucunParticule et/ou son tiré une fois à chaque fois que la croissance normale planifiée entre dans cet âge.

Calcul exact de croissance

La croissance est vérifiée une fois toutes les 600 ticks (30 secondes). Une culture peut avancer d'au plus un âge par vérification. Les cultures déjà à l'âge maximum sont ignorées.

chance de base = 30 / avg_seconds_per_stage
chance finale = chance de base + (chance de base × chaque multiplicateur actif)
la chance finale est limitée entre 0.0 et 1.0

Exemple : avec avg_seconds_per_stage: 120, le lancer de base est 30 / 120 = 0.25, soit 25% toutes les 30 secondes. Pendant une pluie ordinaire avec rain: 0.1, cela devient 0.25 + 0.025 = 0.275, soit 27.5%.

  • rain s'applique quand le monde a une tempête et ne tonne pas.
  • thunderstorm s'applique à la place de la pluie pendant que le monde tonne.
  • max_moisture vérifie actuellement si le nom du biome contient swamp, jungle, ou forest ; il n'inspecte pas l'humidité de la terre labourée.
  • snow s'applique quand le nom du biome contient snow, frozen, ou ice.
  • bonemeal n'est actuellement pas lu par le code de plantation ou d'interaction, donc l'os repas ne force ni n'accélère une culture.
La croissance est probabiliste. avg_seconds_per_stage est une moyenne cible, pas un minuteur garanti. Une valeur configurée de 30 ou moins produit une chance de base de 100% à chaque vérification après limitation.

Planter, récolter et casser

Action du joueurRésultat
Clic droit sur le bloc inférieur configuré avec une graine de culture taguéePlante l'âge 0 si le bloc au-dessus est de l'air. Une graine est consommée sauf si le joueur est en mode Créatif.
Clic droit sur la hitbox de la cultureLance le loot correspondant, déclenche l'événement de récolte, drop les objets approuvés, joue le son d'interaction, puis supprime ou réduit la culture selon decrease_age_on_harvest.
Clic gauche sur la cultureLance le loot correspondant, déclenche l'événement de casse, joue le son de casse, et supprime toujours la culture.
Casser ou piétiner le bloc de supportCasse la culture et lance son loot d'âge actuel.
L'eau ou la lave s'écoule dans l'emplacement de la cultureLe fluide peut s'écouler ; la culture est cassée et son loot d'âge actuel est lancé.
La récolte au clic droit n'est pas limitée aux cultures matures. L'âge actuel de la culture est passé à chaque entrée de loot. Utilisez trigger_min_age et trigger_max_age pour contrôler exactement ce qui peut dropper à chaque âge.

Quand l'intégration WorldGuard est disponible, la plantation est refusée là où le joueur ne peut pas construire. Les événements de cycle de vie de culture (place, croissance, récolte, casse et suppression) sont également exposés aux autres plugins ; les événements annulables peuvent arrêter l'action correspondante, et l'événement de croissance peut changer l'âge cible.

Référence de table de drops

Chaque enfant sous item_drops: est un lancer indépendant. Plusieurs entrées peuvent correspondre et dropper ensemble.

ChampDéfautComportement exact
itemRequisRéférence d'objet à construire. Les références invalides ou non résolues sont ignorées et journalisées.
min_amount1Minimum inclusif. Les valeurs négatives sont limitées à 0.
max_amount1Maximum inclusif. Il est augmenté à au moins min_amount.
chance1.0Probabilité indépendante de 0.0 à 1.0, limitée à cette plage.
trigger_min_age-1Âge minimum correspondant. -1 signifie pas de limite inférieure.
trigger_max_age-1Âge maximum correspondant. -1 signifie pas de limite supérieure.

Références d'objets supportées

FormatExempleRésultat
Graine de culture actuellecrop_seedConstruit la graine plantable et taguée PDC de cette culture avec son modèle de graine attribué.
Matériau vanillaWHEATCrée un objet de matériau Bukkit normal.
Objet de gameplay CustomiZercustomizer:blood_ingotCharge un objet par clé depuis le gestionnaire d'objets personnalisés de CustomiZer.
Élément de packpack:my_farm_pack:tomatoConstruit l'ID d'objet depuis le pack nommé via le gestionnaire de packs.

Drops matures et immatures recommandés

item_drops:
  mature_produce:
    item: "pack:my_farm_pack:tomato"
    min_amount: 1
    max_amount: 3
    chance: 1.0
    trigger_min_age: 2
    trigger_max_age: -1

  mature_seed:
    item: "crop_seed"
    min_amount: 1
    max_amount: 2
    chance: 0.7
    trigger_min_age: 2
    trigger_max_age: -1

  immature_seed:
    item: "crop_seed"
    min_amount: 1
    max_amount: 1
    chance: 1.0
    trigger_min_age: 0
    trigger_max_age: 1

Drops de culture comestibles

Ajoutez food: à n'importe quelle entrée de loot pour appliquer un composant alimentaire Paper à ce drop généré.

ChampDéfautComportement
nutrition2Points de nourriture restaurés par l'objet.
saturation0.2Valeur de saturation attribuée au composant alimentaire.
can_always_eatfalsePermet de manger quand rassasié. Devient aussi vrai globalement quand crops.can_always_eat: true est défini dans config.yml.
effects[].effectRequis par effetNom d'effet de potion Bukkit comme SPEED, HASTE, ou REGENERATION.
effects[].duration100Durée en ticks. 20 ticks = 1 seconde.
effects[].amplifier0Niveau en base zéro : 0 = niveau I, 1 = niveau II.
effects[].chance1.0Chance indépendante vérifiée quand l'aliment tagué est consommé.
# plugins/CustomiZer/config.yml
crops:
  can_always_eat: false
Les effets alimentaires sont liés à la clé YAML de l'entrée de loot. Gardez les IDs d'entrée de loot uniques à travers les cultures quand elles utilisent des effets de consommation différents, car le gestionnaire d'événement de consommation recherche les définitions par ID d'entrée.

Persistance et rechargement

  • Le type de culture placée, l'emplacement, l'âge actuel, les horodatages et l'UUID du planteur sont persistés.
  • Les visuels de culture et les hitboxes sont recréés après le redémarrage et quand leur chunk se charge.
  • Les allocations CustomModelData sont stockées dans un registre afin que l'ajout de cultures ne renumérose pas les cultures existantes.
  • /zcrop reload réanalyse les définitions de culture et rafraîchit les affichages. Reconstruisez ou renvoyez le pack de ressources lors de l'ajout ou du changement de textures/modèles.

Commandes de culture

CommandePermissionObjectif
/zcrop reloadcustomizer.crops.adminRéanalysez les packs de cultures et rechargez les définitions.
/zcrop give <player> <cropId>customizer.crops.admin ou customizer.crops.giveDonnez la graine plantable correctement taguée.
/zcrop listcustomizer.crops.adminListez les IDs de culture enregistrés, les IDs de pack et les âges maximaux.
/zcrop infocustomizer.crops.adminAffichez l'ID, l'âge, le pack et l'emplacement de la culture ciblée dans un rayon de 5 blocs.
/zcrop setage <age>customizer.crops.adminDéfinissez l'âge de la culture ciblée, limité entre 0 et son âge maximum.
/zcrop removecustomizer.crops.adminSupprimez la culture ciblée sans lancer de loot.
/zcrop purge [radius]customizer.crops.adminSupprimez les cultures sauvegardées dans un rayon ; défaut 10, limité de 1 à 200.
/zcrop cleanentities [radius]customizer.crops.adminSupprimez les entités Interaction/ItemDisplay de culture orphelines ; défaut 20, limité de 1 à 200.

Liste de vérification de création

  1. Choisissez un ID de culture en minuscules comme tomato.
  2. Créez soit des stades PNG continus dans Textures/tomato/ soit des stades JSON dans Models/tomato/.
  3. Créez configs/tomato.yml. Si omis, CustomiZer génère une config de base après la détection des fichiers visuels.
  4. Définissez des éléments de pack de récolte et de graine si vous voulez des textures d'inventaire personnalisées.
  5. Utilisez des plages d'âge explicites pour chaque drop mature et immature.
  6. Exécutez /zcrop reload, puis /zcrop list pour confirmer l'enregistrement.
  7. Utilisez /zcrop give <player> tomato, plantez et testez les stades avec /zcrop setage <age>.
  8. Reconstruisez/distribuez le pack de ressources à chaque changement d'assets visuels.

Système GUI

CustomiZer dispose de deux menus en jeu. Ils se ressemblent mais affichent des choses complètement différentes. Lisez cette page en premier — cela vous évitera des heures de confusion.

L'explication en une phrase

/z gui = un navigateur d'affichage — les joueurs parcourent les visuels bruts des packs depuis packs/<packId>/gui.yml. Cliquer donne l'objet brut (texture uniquement, sans mécanique spéciale).
/zitems = un outil admin pour donner des objets — les admins parcourent et cliquent gauche pour donner des objets fonctionnels (épées avec stats, pioches, graines, armures, etc.) depuis items/<packId>/gui.yml.

Chaque menu lit depuis son propre fichier séparé. /z gui lit packs/<packId>/gui.yml ; /zitems lit items/<packId>/gui.yml.

La chose la plus importante à comprendre

/z gui et /zitems lisent maintenant depuis deux fichiers séparés par pack :

packs/<packId>/gui.yml    ← objets visuels bruts affichés dans /z gui (type: pack_item, raw)
items/<packId>/gui.yml   ← objets fonctionnels affichés dans /zitems (type: sword, pickaxe, armor, etc.)

Le champ slot: en haut du yml de chaque pack contrôle où l'icône de catégorie apparaît dans le menu. Il n'y a plus de section pack_overrides pour les assignations d'emplacement.

Le champ type: de chaque objet détermine quel type d'objet il est :

valeur typeFichier associéApparaît dans /z gui ?Apparaît dans /zitems ?Donnable au clic ?
pack_itempacks/<packId>/gui.yml✅ Oui❌ Non❌ Non (navigation uniquement, texture brute)
rawpacks/<packId>/gui.yml✅ Oui❌ Non❌ Non
sworditems/<packId>/gui.yml❌ Non✅ Oui✅ Oui
pickaxeitems/<packId>/gui.yml❌ Non✅ Oui✅ Oui
harvesteritems/<packId>/gui.yml❌ Non✅ Oui✅ Oui
armoritems/<packId>/gui.yml❌ Non✅ Oui✅ Oui
blockitems/<packId>/gui.yml❌ Non✅ Oui✅ Oui
cosmeticitems/<packId>/gui.yml❌ Non✅ Oui✅ Oui
staffitems/<packId>/gui.yml❌ Non✅ Oui✅ Oui

Comparaison côte à côte

🏪 /z gui📦 /zitems
Qui l'utilise ?Tous les joueurs — parcourent les visuels du serveurAdmins — donnent des objets fonctionnels
Qu'affiche-t-il ?Visuels bruts des packs — entrées pack_item / raw. Cliquer donne l'objet brut (texture seulement).Objets fonctionnels — épées, pioches, graines, armures, blocs, etc. Cliquer donne un objet entièrement configuré.
Config qui l'alimentepacks/<packId>/gui.ymlitems/<packId>/gui.yml
Config emplacement catégorieChamp slot: dans packs/<packId>/gui.ymlChamp slot: dans items/<packId>/gui.yml
Config boutons navplugins/CustomiZer/gui/main_menu.ymlplugins/CustomiZer/gui/items_shop.yml
Bouton Parcourir tous les objetsOuvre un navigateur paginé de tous les objets bruts — configuré dans gui/all_items.ymlN/A
Donner au clic ?❌ Non (objet brut uniquement)✅ Oui (admin uniquement)

Référence des emplacements d'inventaire

Les deux GUIs utilisent la numérotation d'emplacements Minecraft standard — de gauche à droite, de haut en bas, en commençant à 0. Un inventaire à 6 rangées a 54 emplacements (0–53) :

Rangée 1:  [ 0][ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8]
Rangée 2:  [ 9][10][11][12][13][14][15][16][17]
Rangée 3:  [18][19][20][21][22][23][24][25][26]
Rangée 4:  [27][28][29][30][31][32][33][34][35]
Rangée 5:  [36][37][38][39][40][41][42][43][44]
Rangée 6:  [45][46][47][48][49][50][51][52][53]  ← rangée boutons nav
Les emplacements 0–8 (rangée du haut) et 45–53 (rangée du bas) sont réservés à la bordure et à la navigation. Placez vos icônes de catégorie dans les rangées 2–5 (emplacements 9–44) pour éviter de chevaucher les boutons nav.

/z gui — Navigateur de packs

Le menu pour les joueurs. Affiche les objets bruts du pack de ressources (textures et modèles personnalisés) pour que les joueurs voient ce qui est disponible sur le serveur. Navigation uniquement — aucun objet n'est donné.

Comment ça fonctionne

Quand un joueur exécute /z gui, il voit une icône par pack enregistré. Cliquer sur l'icône d'un pack ouvre une deuxième page listant tous les objets de type pack_item ou raw du fichier packs/<packId>/gui.yml de ce pack. Un bouton "Parcourir tous les objets" permet aussi de voir tous les objets bruts de tous les packs sur une seule page paginée.

Confusion fréquente : Les icônes de catégorie dans /z gui ne viennent PAS de packs/*/configs/. Elles viennent de packs/<packId>/gui.yml — un fichier de navigateur d'affichage dédié, séparé du fichier /zitems. Le dossier de ressources packs/ contient les textures et définitions d'objets ; le fichier d'affichage GUI se trouve à la racine du plugin sous packs/<packId>/gui.yml.

Config 1 — Mise en page de la coque : plugins/CustomiZer/gui/main_menu.yml

Contrôle le cadre extérieur du navigateur de catégories /z gui : titre, taille, remplissage d'arrière-plan, bordure et le bouton "Parcourir tous les objets". Les boutons de navigation Précédent/Retour/Suivant lors de la navigation dans les objets d'un pack y sont aussi configurés.

# plugins/CustomiZer/gui/main_menu.yml

categories:
  title: "<white><shift:-8><font_image:CustomiZerInternal:1>"
  size: 6
  background:
    enabled: true
    material: PAPER
    model_data: 29999
    name: " "
  border:
    enabled: true
    material: PAPER
    model_data: 29999
    name: " "

pack_gui:
  prev_button:
    slot: 47
    material: PAPER
    model_data: 29999
    name: "&c◀ Précédent"
  back_button:
    slot: 49
    material: PAPER
    model_data: 29999
    name: "&c✖ Retour"
  next_button:
    slot: 51
    material: PAPER
    model_data: 29999
    name: "&aSuivant ▶"
  page_info:
    enabled: true
    slot: 48
    material: PAPER
    model_data: 29999
    name: "&7Page &f%page% &7/ &f%total%"

Config 2 — Objets d'affichage du pack : packs/<packId>/gui.yml

C'est le fichier à créer pour qu'un pack apparaisse dans /z gui. Il contient les objets visuels bruts (type: pack_item ou type: raw) affichés dans le navigateur. Le plugin scanne automatiquement ces fichiers. Aucune autre inscription nécessaire.

Pour /zitems, créez un fichier séparé à items/<packId>/gui.yml avec des types d'objets fonctionnels (sword, pickaxe, armor, etc.).

Changer l'emplacement d'un pack dans /z gui

Modifiez le slot: en haut du fichier packs/<packId>/gui.yml du pack. Ce numéro contrôle où l'icône du pack se place dans la grille des catégories de /z gui. Si aucun fichier packs/ n'existe pour un pack, l'emplacement est lu depuis items/<packId>/gui.yml.

# packs/my_gem_pack/gui.yml  ← navigateur d'affichage pour /z gui

name: "<gradient:#ffd700:#ff9a3c><bold>Gem Pack</bold></gradient>"
slot: 11    # ← Changez ceci pour déplacer l'icône dans /z gui

icon:
  pack: my_gem_pack
  id: ruby

gui:
  size: 6

# Seuls les types pack_item / raw apparaissent dans /z gui
items:
  - type: pack_item
    pack: my_gem_pack
    id: ruby
    name: "&cRuby"
    lore:
      - "&7Une gemme rouge précieuse"

  - type: pack_item
    pack: my_gem_pack
    id: emerald_gem
    name: "&aEmerald Gem"
    lore:
      - "&7Une gemme verte brillante"
Carte des emplacements pour les icônes de catégorie — meilleurs emplacements dans la grille à 6 rangées :
Rangée 2 : 11 12 13 14 15  |  Rangée 3 : 20 21 22 23 24  |  Rangée 4 : 29 30 31 32 33  |  Rangée 5 : 38 39 40 41 42
Évitez les rangées 1 et 6 (zone bordure/nav).

Ajouter un pack dans /z gui (résumé)

  1. Créez packs/mon_pack/gui.yml avec un slot: libre et des entrées pack_item
  2. Exécutez /zpack reloadpacks en jeu

C'est tout. Aucun autre fichier n'a besoin d'être modifié pour que le pack apparaisse dans /z gui.

/zitems — Navigateur d'objets fonctionnels

L'outil d'administration pour naviguer et donner des objets fonctionnels — épées à niveaux, pioches, cosmétiques, moissonneuses, et plus encore. Cliquez gauche sur n'importe quel objet pour le recevoir instantanément.

CustomiZer /zitems main GUI

Le menu principal /zitems — chaque icône est un pack enregistré. Cliquez sur un pack pour naviguer dans ses objets fonctionnels.

Point clé : /zitems et /z gui lisent maintenant depuis des fichiers séparés. /zitems lit items/<packId>/gui.yml et n'affiche que les types d'objets fonctionnels (sword, pickaxe, armor, etc.). /z gui lit packs/<packId>/gui.yml et affiche les visuels bruts (pack_item, raw). Si vous voyez un objet dans /z gui mais pas dans /zitems, vous devez l'ajouter dans items/<packId>/gui.yml avec un type fonctionnel.

Config 1 — Boutons nav : plugins/CustomiZer/gui/items_shop.yml

Ce fichier contrôle les boutons Précédent / Retour / Suivant et les infos de page affichés lors de la navigation dans les objets d'une catégorie. Il ne contrôle pas quels packs apparaissent comme catégories — cela vient du fichier items/<packId>/gui.yml de chaque pack.

# plugins/CustomiZer/gui/items_shop.yml

pack_gui:
  prev_button:
    slot: 47
    material: PAPER
    model_data: 29999
    name: "&c◀ Précédent"
  back_button:
    slot: 49
    material: PAPER
    model_data: 29999
    name: "&c✖ Retour"
  next_button:
    slot: 51
    material: PAPER
    model_data: 29999
    name: "&aSuivant ▶"
  page_info:
    enabled: true
    slot: 48
    material: PAPER
    model_data: 29999
    name: "&7Page &f%page% &7/ &f%total%"

Config 2 — Objets fonctionnels du pack : items/<packId>/gui.yml

C'est le fichier qui enregistre les objets fonctionnels dans /zitems. Il est séparé du fichier packs/<packId>/gui.yml utilisé par /z gui. Vous avez besoin des deux fichiers si vous souhaitez qu'un pack apparaisse dans les deux menus.

Changer l'emplacement d'une catégorie dans /zitems

Modifiez slot: en haut de items/<packId>/gui.yml. Cela contrôle la position de l'icône du pack dans /zitems. Le fichier packs/<packId>/gui.yml contrôle l'emplacement dans /z gui indépendamment.

Contrôler le placement des objets dans une catégorie

Chaque entrée d'objet dans items/<packId>/gui.yml supporte un champ optionnel slot: qui l'ancre à une position spécifique :

# items/my_pack/gui.yml  ← objets fonctionnels pour /zitems

name: "<gradient:#5cc8ff:#7ee787><bold>My Pack</bold></gradient>"
slot: 11
icon:
  pack: my_pack
  id: silver_sword
gui:
  size: 6

items:
  # Objets fonctionnels → apparaissent dans /zitems (cliquer donne l'objet entièrement configuré)
  - type: sword
    id: silver_sword
    slot: 11          # ← ancré à l'emplacement exact 11 dans la page de catégorie /zitems
    name: "&7⚔ Silver Sword"
    lore:
      - "&7Une épée à niveaux"
      - "&aClic gauche pour recevoir"

  - type: pickaxe
    id: silver_pickaxe
    slot: 12          # ← ancré à l'emplacement 12
    name: "&7⛏ Silver Pickaxe"

  - type: harvester
    id: silver_hoe
    # pas de slot: → placé automatiquement après les objets ancrés

Pour le navigateur d'affichage (/z gui), créez un fichier packs/my_pack/gui.yml séparé avec des entrées type: pack_item pour les mêmes objets.

Règles d'emplacement dans une catégorie :
• Si slot: est défini → l'objet est placé à cet emplacement exact
• Si pas de slot: → placé automatiquement de gauche à droite après les objets ancrés
• Si le pack a plus d'objets qu'une page → toutes les valeurs slot: sont ignorées et les objets se paginent séquentiellement (la dernière rangée devient les boutons Préc/Retour/Suiv)

Référence des types d'objets

typeApparaît dansDonnable au clicConfiguré dans
pack_item/z gui uniquementpacks/<pack>/configs/*.yml
raw/z gui uniquementpacks/<pack>/configs/*.yml
sword/zitems uniquementCustomiZe!/<pack>/swords.yml
pickaxe/zitems uniquementCustomiZe!/<pack>/pickaxes.yml
harvester/zitems uniquementCustomiZe!/<pack>/harvesterhoes.yml
armor/zitems uniquementCustomiZe!/<pack>/armors.yml
block/zitems uniquementCustomiZe!/<pack>/blocks.yml
cosmetic/zitems uniquementCustomiZe!/<pack>/cosmetics.yml
staff/zitems uniquementCustomiZe!/<pack>/staves.yml

Convertir des packs ItemsAdder automatiquement

Si vous avez des packs de contenu ItemsAdder à migrer vers CustomiZer, le convertisseur intégré s'en charge automatiquement — il crée le gui.yml, copie les assets et classe les objets.

  1. Déposez le dossier de contenu ItemsAdder (doit contenir configs/ et resourcepack/) dans :
    plugins/CustomiZer/converters/itemsadder/input/<nomDuPack>/
  2. Exécutez en jeu : /zpack convert itemsadder <nomDuPack>
  3. Exécutez /zpack zip pour reconstruire le pack de ressources
Le convertisseur classe automatiquement les objets par nom/matériau : chapeaux, ailes, épées, bâtons, etc. Tous les objets apparaissent en tant que pack_item dans /z gui. Les cosmétiques, épées et bâtons reçoivent également des fichiers yml fonctionnels pour apparaître dans /zitems.

Pack GUI — Référence gui.yml

Deux fichiers séparés par pack : un pour le navigateur d'affichage /z gui, un pour l'outil admin /zitems. Chaque fichier contrôle quel emplacement le pack occupe, quelle icône il affiche et quels objets apparaissent à l'intérieur.

Où se trouvent les fichiers

packs/<packId>/gui.yml    ← navigateur d'affichage pour /z gui (type: pack_item, raw)
items/<packId>/gui.yml   ← outil admin pour /zitems (type: sword, pickaxe, armor, etc.)

Le plugin détecte automatiquement ces fichiers. Aucune autre inscription n'est nécessaire — créez simplement le fichier et rechargez. Le champ slot: en haut de chaque fichier contrôle où l'icône de catégorie apparaît. Si un seul fichier existe pour un pack, son slot: est utilisé pour les deux menus.

packs/<packId>/gui.yml — navigateur d'affichage (/z gui)

# packs/my_pack/gui.yml  ← objets visuels bruts affichés dans /z gui

# Nom affiché comme étiquette du pack dans /z gui.
name: "<gradient:#5cc8ff:#7ee787><bold>My Pack</bold></gradient>"

# Emplacement dans la grille des catégories /z gui.
# Utilisez les emplacements 11–15, 20–24, 29–33 ou 38–42 pour de meilleurs résultats.
slot: 11

# L'icône affichée pour ce pack dans la grille /z gui.
icon:
  pack: my_pack     # namespace du pack
  id: silver_ore    # id de l'objet dans ce pack

# Le titre et la taille de la page de navigation.
gui:
  title: "<white><shift:-8><font_image:CustomiZerInternal:1>"
  size: 6   # rangées (1–6) ; dernière rangée = boutons nav si size > 1

# Seuls les types pack_item / raw appartiennent ici
items:

  # Objet visuel brut — apparaît dans /z gui (cliquer donne l'objet brut)
  - type: pack_item
    pack: my_pack
    id: silver_ore
    name: "&7Silver Ore"
    lore:
      - "&7Un minerai brut"
    # slot: 0    ← optionnel : ancrer à une position exacte

items/<packId>/gui.yml — outil admin (/zitems)

# items/my_pack/gui.yml  ← objets fonctionnels affichés dans /zitems

name: "<gradient:#5cc8ff:#7ee787><bold>My Pack</bold></gradient>"
slot: 11

icon:
  pack: my_pack
  id: silver_ore

gui:
  size: 6

# Les types d'objets fonctionnels appartiennent ici
items:

  # Épée fonctionnelle — apparaît dans /zitems
  - type: sword
    id: silver_sword
    slot: 11      # optionnel : ancrer à l'emplacement 11 dans la page de catégorie /zitems
    name: "&7⚔ Silver Sword"
    lore:
      - "&7Une épée à niveaux"
      - "&aClic gauche pour recevoir"

  # Pioche fonctionnelle — apparaît dans /zitems
  - type: pickaxe
    id: silver_pickaxe
    slot: 12
    name: "&7⛏ Silver Pickaxe"

  # Houe moissonneuse fonctionnelle — apparaît dans /zitems
  - type: harvester
    id: silver_hoe
    name: "&7🌾 Silver Hoe"

  # Cosmétique fonctionnel — apparaît dans /zitems
  - type: cosmetic
    id: silver_crown
    name: "&7👑 Silver Crown"

Erreurs fréquentes & solutions

ProblèmeCauseSolution
Le pack n'apparaît dans aucun GUIPas de packs/<packId>/gui.yml ou items/<packId>/gui.yml, ou plugin non rechargéCréez le(s) fichier(s) approprié(s) ; exécutez /zpack reloadpacks
L'icône du pack est au mauvais emplacementLe slot: en haut du gui.yml entre en conflit avec un autre packChangez slot: pour un numéro libre (plage 11–42)
L'objet apparaît dans /z gui mais pas /zitemsLe type de l'objet est pack_item ou rawC'est voulu. Changez le type en sword, cosmetic, etc. si vous le voulez dans /zitems
L'objet apparaît dans /zitems mais pas /z guiLe type de l'objet n'est pas pack_item / rawAjoutez une entrée pack_item séparée pour le même id d'objet
Le slot: est ignoré / les objets se chevauchentLe pack a plus d'objets qu'une page → la pagination écrase les valeurs slot:Réduisez le nombre d'objets pour tenir sur une page, ou supprimez slot: et laissez les objets se paginer automatiquement
L'épée fonctionnelle s'affiche mais ne fait rienL'id: dans gui.yml ne correspond pas à la clé dans swords.ymlAssurez-vous que les deux fichiers utilisent exactement la même chaîne d'id
7

Rechargez et testez

Exécutez /z reload en jeu. Le plugin reconstruira le pack de ressources, l'enverra à tous les joueurs en ligne, et mettra à jour les deux GUIs immédiatement. Vérifiez /z gui et /zitems pour confirmer que votre pack et vos objets apparaissent correctement.

Erreurs courantes

ProblèmeCauseSolution
Le pack n'apparaît pas dans /z guiFichier packs/my_pack/gui.yml manquant ou slot: non définiCréez le fichier et assurez-vous que slot: est défini sur un numéro d'emplacement libre
Le pack n'apparaît pas dans /zitemsFichier items/my_pack/gui.yml manquantCréez items/my_pack/gui.yml avec les entrées de types fonctionnels appropriées
L'objet affiche la mauvaise texture ou une épée en fer vanillaConflit CMD avec un autre pack, ou le chemin de texture est incorrectVérifiez que tous les CMDs sont uniques ; vérifiez que le chemin de texture correspond exactement au nom du fichier PNG
L'épée/pioche fonctionnelle s'affiche mais ne fait rienL'entrée CustomiZe!/my_pack/swords.yml (ou pickaxes.yml) n'existe pas ou a une faute de frappe dans l'idVérifiez que id: dans gui.yml correspond exactement à la clé dans swords.yml
Les objets apparaissent dans /z gui mais ne peuvent pas être reçusC'est par conception — /z gui est en navigation seulementAjoutez les objets dans items/<packId>/gui.yml pour /zitems si vous voulez que les admins puissent les donner

Système de maîtrise

Pistes XP persistantes qui récompensent les joueurs pour le minage, le combat, l'agriculture et l'exploration avec des récompenses de jalons.

Fichier : plugins/CustomiZer/mastery.yml

Qu'est-ce que la maîtrise ?

Les pistes de maîtrise donnent aux joueurs un objectif de progression à long terme séparé du levelling. Casser du minerai donne de l'XP de Maîtrise en minage. Tuer des monstres donne de l'XP de Maîtrise au combat. Atteindre des jalons (niveau 10, 25, 50, 100) déclenche des commandes de récompense et des messages.

max_level: 100     # Niveau de maîtrise maximum pour toutes les pistes

tracks:
  mining:
    display: "⛏ Mining Mastery"

    # XP gagné par bloc cassé
    xp_per_block:
      COAL_ORE: 3
      IRON_ORE: 5
      GOLD_ORE: 7
      DIAMOND_ORE: 15
      ANCIENT_DEBRIS: 40
      DEEPSLATE_COAL_ORE: 4
      my_pack:ruby_ore: 12       # Les blocs de pack personnalisés utilisent namespace:key

    xp_per_level: 1000           # XP nécessaire par niveau (identique pour tous les niveaux)

    milestones:
      10:
        message: "⛏ Mining Mastery 10 reached!"
        commands:
          - "give {player} diamond 5"
      25:
        message: "⛏ Mining Mastery 25! You're a real miner."
      50:
        message: "⛏ Mining Mastery 50!"
        commands:
          - "cxp give {player} item prestige_token 1"
      100:
        message: "⛏ MINING MASTER! Maximum level achieved!"
        commands:
          - "cxp give {player} item elite_pickaxe 1"

  combat:
    display: "⚔ Combat Mastery"
    xp_per_kill:
      ZOMBIE: 3
      SKELETON: 4
      SPIDER: 3
      CREEPER: 6
      ENDER_DRAGON: 200
      WITHER: 100
    xp_per_level: 1500

  farming:
    display: "🌿 Farming Mastery"
    xp_per_harvest:
      WHEAT: 2
      CARROTS: 2
      POTATOES: 2
      PUMPKIN: 5
    xp_per_level: 800

Commandes

CommandeDescription
/zmasteryVoir vos propres niveaux de maîtrise
/zmastery <player>Voir la maîtrise d'un autre joueur

Missions

Objectifs quotidiens et hebdomadaires qui se réinitialisent selon un calendrier et récompensent les joueurs avec de l'argent et des objets.

Fichier : plugins/CustomiZer/missions.yml
daily_reset_hour: 0       # Heure de la journée pour réinitialiser les missions quotidiennes (0 = minuit)
weekly_reset_day: MONDAY  # Jour de la semaine pour réinitialiser les missions hebdomadaires

daily:
  mine_iron:
    display: "⛏ Iron Miner"
    description: "Mine 30 Iron Ore"
    objective: MINE_BLOCK   # Type d'objectif (voir tableau ci-dessous)
    target: IRON_ORE        # Ce qu'il faut miner/tuer/récolter
    amount: 30              # Combien nécessaire pour compléter
    rewards:
      money: 200
      commands:
        - "cxp give {player} item mission_token 2"
      message: "Daily Complete: Iron Miner! +$200"

  kill_zombies:
    display: "⚔ Zombie Slayer"
    description: "Kill 25 Zombies"
    objective: KILL_MOB
    target: ZOMBIE
    amount: 25
    rewards:
      money: 150

weekly:
  nether_run:
    display: "🔥 Nether Runner"
    description: "Mine 5 Ancient Debris this week"
    objective: MINE_BLOCK
    target: ANCIENT_DEBRIS
    amount: 5
    rewards:
      money: 2000
      commands:
        - "cxp give {player} item mission_token 10"

Types d'objectifs

ObjectifExemples de cibleNotes
MINE_BLOCKIRON_ORE, COAL_ORETout matériau de bloc vanilla
MINE_CUSTOM_BLOCKmy_pack:ruby_oreUn bloc de pack personnalisé
MINE_BLOCK_WITH_TOOLSTONEAjoutez aussi tool: pickaxe_key
KILL_MOBZOMBIE, ENDER_DRAGON, ANY_HOSTILEEntityType ou ANY_HOSTILE
HARVEST_CROPWHEAT, ANY_CROPMatériau ou ANY_CROP
EAT_ITEMclé d'objet depuis items.ymlObjet alimentaire CustomiZer
USE_ITEMclé d'objet depuis items.ymlObjet utilisable CustomiZer

Prestige

Atteignez le maximum de vos pistes de maîtrise pour prestigier — gagnant des multiplicateurs de bonus de récompense permanents qui s'accumulent.

Fichier : plugins/CustomiZer/prestige.yml
max_prestige: 10

# Quelles pistes de maîtrise doivent être au niveau maximum pour prestigier
mastery_tracks_required:
  - mining
  - combat

mastery_level_required: 100    # Toutes les pistes listées doivent atteindre ce niveau

levels:
  1:
    display: "✦ Prestige I"
    permanent_bonus_percent: 2    # +2% à tout XP et récompenses, en permanence
    rewards:
      money: 5000
      commands:
        - "cxp give {player} item prestige_token 2"
      message: "★ Prestige I achieved! +2% permanent bonus!"

  2:
    display: "✦ Prestige II"
    permanent_bonus_percent: 4
    rewards:
      money: 8000

  10:
    display: "✦ ASCENDANT"
    permanent_bonus_percent: 20
    rewards:
      money: 100000
      commands:
        - "cxp give {player} sword celestial_blade"

Reforgement

Relancez les modificateurs de statistiques sur les armes et armures en utilisant des pierres de reforgeage.

Fichier : plugins/CustomiZer/reforge.yml
reforge_cost_item: "reforge_stone"    # Clé d'objet CustomiZer consommée à chaque reforgeage
reforge_cost_amount: 3               # Combien de pierres consommées
reforge_cost_money: 250.0            # Coût en argent (en plus des objets)
use_money_cost: true

modifiers:
  savage:
    display: "Savage"
    stats:
      GENERIC_ATTACK_DAMAGE: 2.0
      GENERIC_ATTACK_SPEED: 0.1
    lore_line: "✦ Savage: +2 ATK, +0.1 SPD"
    weight: 20       # Poids plus élevé = plus souvent lancé

  ancient:
    display: "Ancient"
    stats:
      GENERIC_MAX_HEALTH: 4.0
      GENERIC_ARMOR: 1.0
    lore_line: "✦ Ancient: +4 HP, +1 Armor"
    weight: 15

  celestial:
    display: "Celestial"
    stats:
      GENERIC_ATTACK_DAMAGE: 4.0
      GENERIC_MAX_HEALTH: 6.0
      GENERIC_ARMOR: 2.0
    weight: 2         # Modificateur rare

  void:
    display: "Void"
    stats:
      GENERIC_ATTACK_DAMAGE: 6.0
      GENERIC_ATTACK_SPEED: 0.3
    weight: 1         # Modificateur très rare

Réparation

Restaurez la durabilité personnalisée sur les épées et outils avec des réductions basées sur le rang et des temps de recharge.

Fichier : plugins/CustomiZer/repair.yml
repair-rate-per-10%: 1000          # Coût de base (argent) pour restaurer 10% de durabilité

# Coût par 10% de durabilité pour les épées, par niveau de rareté
swords-repair-rate-per-10%:
  common: 1000
  rare:   2000
  epic:   3000
  legendary: 4000
  mythic: 5000

# Temps de recharge et réductions différents par rang de joueur
# Le rang est déterminé par le nom de groupe LuckPerms
general-cooldown-per-rank:
  Default:
    Cooldown: 10000    # Millisecondes entre les réparations (10000 = 10 secondes)
    Discount: 0        # Pourcentage de réduction sur le coût
  VIP:
    Cooldown: 5000
    Discount: 10
  MVP:
    Cooldown: 3000
    Discount: 15
  ELITE:
    Cooldown: 2000
    Discount: 20

messages:
  no-money: "&cNot enough money."
  repaired-successfully: "&aRepaired {count} items for &6${cost}&a."
  no-items-to-repair: "&eNo items need repairs."
  cooldown-message: "&cWait {time} seconds before repairing again."

Cette page a été déplacée. Cliquez ici pour la page Système de niveaux.

Le Système de niveaux

CustomiZer supporte le levelling basé sur les kills pour les épées et haches, et le levelling basé sur les blocs pour les pioches. Les deux sont des add-ons optionnels pour les armes et outils normaux.

Ce système entier est optionnel. Vous pouvez créer des épées, haches et pioches sans aucun levelling — elles fonctionnent très bien comme de simples objets personnalisés. N'ajoutez le levelling que si vous voulez que les joueurs améliorent leurs outils au fil du temps.

Vue d'ensemble — Deux types de levelling

Type d'objetCe qui déclenche une montée de niveauFichier de config
Épées & HachesLe joueur tue des monstres avec l'armeswords.yml / axes.yml + rarity.yml
PiochesLe joueur mine des blocs avec la piochepickaxes.yml (autonome)

Rareté des épées & haches (basée sur les kills)

Les épées et haches peuvent avoir un bloc rarity: dans leur configuration. Le plugin suit les kills dans les données NBT de l'objet. Quand le compte de kills atteint le seuil configuré, l'arme monte automatiquement au tier suivant — aucune commande nécessaire.

CommunRareÉpiqueLégendaireMythique

Ce qui se passe quand une épée/hache monte de niveau :

Étape 1 — Définissez une texture par tier dans votre pack

Chaque tier de rareté a besoin de sa propre entrée d'élément de pack avec un model_id unique pointant vers un fichier de texture différent :

# packs/my_pack/configs/items.yml
items:
  dragon_blade_common:
    resource:
      generate: true
      material: IRON_SWORD
      model_id: 32001           # CMD pour le tier Commun
      textures: [weapons/dragon_blade_common.png]

  dragon_blade_rare:
    resource:
      generate: true
      material: IRON_SWORD
      model_id: 32002           # CMD pour le tier Rare — PNG différent !
      textures: [weapons/dragon_blade_rare.png]

  dragon_blade_epic:
    resource:
      generate: true
      material: IRON_SWORD
      model_id: 32003
      textures: [weapons/dragon_blade_epic.png]

  dragon_blade_legendary:
    resource:
      generate: true
      material: IRON_SWORD
      model_id: 32004
      textures: [weapons/dragon_blade_legendary.png]

  dragon_blade_mythical:
    resource:
      generate: true
      material: IRON_SWORD
      model_id: 32005
      textures: [weapons/dragon_blade_mythical.png]

Étape 2 — Ajoutez le bloc de rareté à votre épée

Pointez chaque tier de rareté vers le CMD correct :

# CustomiZe!/__global__/swords.yml
swords:
  dragon_blade:
    type: IRON_SWORD
    display_name: "&4Dragon Blade"
    durability: 5000
    attributes:
      GENERIC_ATTACK_DAMAGE: 10.0

    lore:
      - "&8Rarity: %rarity%"
      - "&8Kills: %progress% / %required%"

    # Le bloc de rareté — supprimez-le entièrement si vous ne voulez pas de levelling
    rarity:
      common:
        custom_model_data: 32001    # Correspond au model_id de dragon_blade_common
        name: "&7Common Dragon Blade"
      rare:
        custom_model_data: 32002
        name: "&9Rare Dragon Blade"
      epic:
        custom_model_data: 32003
        name: "&5Epic Dragon Blade"
      legendary:
        custom_model_data: 32004
        name: "&6Legendary Dragon Blade"
      mythical:
        custom_model_data: 32005
        name: "&dMythical Dragon Blade"

Étape 3 — Configurez rarity.yml

plugins/CustomiZer/rarity.yml est la chaîne de rareté globale. Chaque épée et hache du serveur partage ce fichier — il définit les noms des tiers, les seuils de kills et les buffs de statistiques. Votre bloc rarity: par épée dans swords.yml contrôle uniquement le CMD (texture) et le nom d'affichage par tier ; la logique de montée de niveau réelle vit ici.

rarity.yml — Toutes les clés de configuration

CléTypeRequis ?Description
NameChaîneRequisNom d'affichage pour ce tier de rareté. Supporte les codes couleur & (ex. &6Legendary). Affiché via le placeholder de description %rarity%.
BuffEntierRequisMultiplicateur de statistiques en pourcentage appliqué à tous les attributes d'épée quand l'objet atteint ce tier. Formule : final_value = configured_value × (1 + Buff ÷ 100). Définissez à 0 pour pas de buff.
EvolutionKillsRequiredEntierRequisNombre de kills nécessaires à ce tier pour avancer au suivant. Le compteur se réinitialise à 0 après chaque amélioration — c'est par tier, pas cumulatif. Définissez à 0 sur votre tier final (bien que NextRarity: null arrête déjà les améliorations).
NextRarityChaîne ou nullRequisL'ID de rareté vers lequel monter quand le compte de kills est atteint. Doit correspondre à la clé YAML d'une autre entrée dans rarities:. Définissez à null (sans guillemets) pour marquer ceci comme le tier final — aucune autre amélioration ne se produira.
Model_data est également analysé depuis ce fichier mais n'est pas utilisé pour les changements de texture. Les textures sont contrôlées par custom_model_data à l'intérieur du bloc rarity: de l'épée dans swords.yml. Vous pouvez ignorer Model_data dans rarity.yml en toute sécurité.

Comment fonctionne exactement le Buff

Quand une épée monte à un nouveau tier, le plugin lit toutes les valeurs d'attribut depuis le bloc attributes: de l'épée et les réapplique avec le multiplicateur Buff du tier :

# Configuration de l'épée :
attributes:
  GENERIC_ATTACK_DAMAGE: 10.0
  GENERIC_ATTACK_SPEED: 1.6

# À Rare (Buff: 10) :
#   attack_damage = 10.0 × (1 + 10/100) = 11.0
#   attack_speed  = 1.6  × (1 + 10/100) = 1.76

# À Épique (Buff: 20) :
#   attack_damage = 10.0 × (1 + 20/100) = 12.0
#   attack_speed  = 1.6  × (1 + 20/100) = 1.92

# À Légendaire (Buff: 30) :
#   attack_damage = 10.0 × 1.30 = 13.0

# À Mythique (Buff: 40) :
#   attack_damage = 10.0 × 1.40 = 14.0
Le Buff s'applique toujours à la valeur configurée originale, pas de manière composée. Un Buff de 40 signifie toujours +40% de la statistique de base — il ne s'empile pas multiplicativement à travers les tiers.

Comment fonctionne le compteur de kills

Vous pouvez créer des chaînes de tiers entièrement personnalisées

Le système de rareté n'est pas limité aux cinq tiers par défaut. Vous pouvez créer n'importe quel nombre de tiers avec n'importe quels noms. La clé YAML est l'ID interne du tier — elle doit correspondre à ce que vous écrivez dans NextRarity et dans le bloc rarity: de votre épée.

Exemple — Chaîne personnalisée à 3 tiers

# rarity.yml — une chaîne personnalisée à 3 tiers
rarities:
  bronze:
    Name: "&6Bronze"
    Buff: 0
    EvolutionKillsRequired: 25
    NextRarity: "silver"

  silver:
    Name: "&fSilver"
    Buff: 15
    EvolutionKillsRequired: 75
    NextRarity: "gold"

  gold:
    Name: "&e&lGold"
    Buff: 35
    EvolutionKillsRequired: 0    # Inutile — NextRarity est null
    NextRarity: null              # Tier max

Puis dans la configuration de votre épée, votre bloc rarity: utilise ces mêmes IDs :

rarity:
  bronze:
    custom_model_data: 50001
    name: "&6Bronze Blade"
  silver:
    custom_model_data: 50002
    name: "&fSilver Blade"
  gold:
    custom_model_data: 50003
    name: "&e&lGolden Blade"

Exemple — Progression à 7 tiers pour un serveur long terme

rarities:
  novice:
    Name: "&7Novice"
    Buff: 0
    EvolutionKillsRequired: 50
    NextRarity: "apprentice"

  apprentice:
    Name: "&aApprentice"
    Buff: 8
    EvolutionKillsRequired: 150
    NextRarity: "adept"

  adept:
    Name: "&2Adept"
    Buff: 16
    EvolutionKillsRequired: 300
    NextRarity: "expert"

  expert:
    Name: "&bExpert"
    Buff: 25
    EvolutionKillsRequired: 500
    NextRarity: "master"

  master:
    Name: "&9Master"
    Buff: 35
    EvolutionKillsRequired: 750
    NextRarity: "grandmaster"

  grandmaster:
    Name: "&5Grandmaster"
    Buff: 45
    EvolutionKillsRequired: 1000
    NextRarity: "legend"

  legend:
    Name: "&6&lLEGEND"
    Buff: 60
    EvolutionKillsRequired: 0
    NextRarity: null
rarity.yml est global. Chaque épée et hache de votre serveur partage la même chaîne de rareté. Vous ne pouvez pas donner à différentes épées des seuils de kills différents ou un nombre différent de tiers. Si vous voulez que l'épée A monte plus vite que l'épée B, votre seule option est de définir des seuils plus bas globalement et d'accepter que toutes les armes les partagent.

Important — rarity.yml vs bloc rarity dans swords.yml

Configuré dansContrôle
rarity.ymlNoms des tiers (Name), multiplicateurs de buff de statistiques (Buff), seuils de kills (EvolutionKillsRequired), chaîne d'amélioration (NextRarity). Global pour toutes les épées.
swords.yml → bloc rarity:Quelle texture (CMD) utiliser par tier, et le remplacement du nom d'affichage par tier. Par épée.

Les IDs de tier (ex. common, rare, bronze) doivent être identiques dans les deux fichiers — le nom dans la map rarities: de rarity.yml doit correspondre au nom dans le bloc rarity: de l'épée.

Placeholders de description d'épée (avec rareté)

PlaceholderRemplacé par
%rarity%Valeur Name du tier actuel depuis rarity.yml (avec codes couleur appliqués)
%progress%Kills vers la prochaine amélioration (se réinitialise après chaque amélioration)
%required%Kills nécessaires pour atteindre le prochain tier (EvolutionKillsRequired)
%total_kills%Kills à vie de tous les temps avec cet objet spécifique (ne se réinitialise jamais)
%custom_durability%Durabilité actuelle
%max_custom_durability%Durabilité max à ce tier de rareté

Levelling de pioche (basé sur les blocs)

Les pioches utilisent un système de levelling entièrement autonome défini à l'intérieur de pickaxes.yml — il n'y a pas de rarity.yml séparé impliqué. Chaque définition de pioche contient une map levels:. Le plugin compte les blocs minés et monte quand le seuil est atteint.

Ce qui se passe quand une pioche monte de niveau :

# CustomiZe!/__global__/pickaxes.yml
pickaxes:
  tier_pickaxe:
    type: DIAMOND_PICKAXE
    display_name: "⛏ Tier Pickaxe"
    lore:
      - "Level: %level% / %max_level%"
      - "Blocks mined: %blocks_mined% / %blocks_required%"
      - "Mining area: %radius%×%radius%"
      - "%bonuses%"

    levels:
      1:
        name: "⛏ Tier Pickaxe [Lvl. 1]"
        custom_model_data: 30041        # Texture pour le niveau 1
        durability: 2000
        radius: 1                       # Mine 1×1 (juste le bloc unique)
        height_radius: 0
        effect_on_hold: haste
        effect_amplifier: 0             # Hâte I
        blocks_required: 200            # Minez 200 blocs → niveau 2
        bonus:
          - "• Haste I while held"

      2:
        name: "⛏ Tier Pickaxe [Lvl. 2]"
        custom_model_data: 30042        # Texture différente
        durability: 4000
        radius: 1
        height_radius: 1               # Mine maintenant 1×3 de hauteur
        effect_on_hold: haste
        effect_amplifier: 0
        blocks_required: 500
        bonus:
          - "• Haste I"
          - "• 1×3 column mining"

      3:
        name: "⛏ Tier Pickaxe [Lvl. 3]"
        custom_model_data: 30043
        durability: 7000
        radius: 3                       # Zone 3×3 !
        height_radius: 1
        effect_on_hold: haste
        effect_amplifier: 1             # Hâte II
        blocks_required: 1000
        bonus:
          - "• Haste II"
          - "• 3×3 area mining"

      4:
        name: "⛏ Tier Pickaxe [MAX]"
        custom_model_data: 30044
        durability: 12000
        radius: 3
        height_radius: 3               # Zone 3×7
        effect_on_hold: haste
        effect_amplifier: 1
        blocks_required: 0             # 0 = c'est le niveau max
        bonus:
          - "• Haste II"
          - "• 3×7 area mining"
          - "• MAX LEVEL"
Définissez blocks_required: 0 sur la dernière entrée de niveau. Le plugin traite 0 comme "pas d'amélioration supplémentaire" — c'est l'indicateur de niveau maximum.

Placeholders de description de pioche

PlaceholderAffiche
%level%Numéro de niveau actuel
%max_level%Niveau le plus élevé défini
%blocks_mined%Blocs minés avec cette pioche
%blocks_required%Blocs nécessaires pour le prochain niveau (0 au max)
%current_durability%Durabilité personnalisée restante
%max_durability%Durabilité max au niveau actuel
%radius%Côté de zone de minage actuel (ex. 3 = 3×3)
%height_radius%Rayon de minage vertical
%bonuses%Toutes les lignes de bonus pour le niveau actuel

Générateurs de minerai

Injectez automatiquement des blocs personnalisés dans la génération du monde — aucun éditeur de monde externe nécessaire.

Fichier : plugins/CustomiZer/generators.yml

Ce que ça fait

Quand un chunk est chargé pour la première fois (ou généré fraîchement), CustomiZer place vos minerais personnalisés dedans — comme Minecraft génère naturellement des veines de minerai de diamant. Les joueurs les minent comme des minerais vanilla.

Configuration

worlds_populators:
  # Une clé unique pour cette entrée de générateur
  ruby_ore_overworld:
    block: my_pack:ruby_ore      # Le bloc à placer ("namespace:key" ou "minecraft:stone")
    worlds:
      - world                     # Monde normal
      - world_caves               # Monde de grottes si vous en avez un
    replaceable_blocks:           # Remplace uniquement ces blocs lors du placement
      - STONE
      - ANDESITE
      - GRANITE
      - TUFF
    biomes:                       # Liste vide = apparaître dans TOUS les biomes
      - PLAINS
      - FOREST
      - JUNGLE
      - MOUNTAINS
    chance: 60.0                  # Pourcentage de chance de générer une veine par chunk (0–100)
    amount: 5                     # Nombre de veines de minerai par chunk
    min_height: 15                # Niveau Y minimum pour apparaître
    max_height: 55                # Niveau Y maximum pour apparaître

  deepslate_ruby_ore:
    block: my_pack:deepslate_ruby_ore
    worlds:
      - world
    replaceable_blocks:
      - DEEPSLATE
      - COBBLED_DEEPSLATE
    biomes: []                    # Vide = tout biome
    chance: 35.0
    amount: 3
    min_height: -60
    max_height: 0                 # Uniquement au niveau de la deeppslate

Conseils

Commandes

CommandePermissionDescription
/zworld reloadcxp.adminRecharger la configuration des générateurs sans redémarrer
/zworld generate <world>cxp.adminForcer le peuplement de tous les chunks chargés dans un monde

Tables d'artisanat personnalisées

Blocs ou meubles d'établi personnalisés avec des dispositions d'emplacements configurables, des permissions et un stockage de recettes. Créez et supprimez des tables entièrement en jeu — aucune modification du fichier de config requise.

Fichier : plugins/CustomiZer/custom_crafting_tables.yml — ou utilisez /zcraft newtable pour créer des tables depuis un assistant GUI sans toucher au fichier.
custom_crafting_tables:
  enabled: true

  storage:
    type: "sqlite"             # "sqlite" (basé sur fichier) ou "mongodb"
    sqlite:
      file: "custom_crafting_recipes.db"
      table: "custom_crafting_recipes"

  default_table: "basic_workbench"

  tables:
    basic_workbench:
      enabled: true
      display_name: "&aEtabli Basique"

      # Ouvrir ce GUI quand un joueur fait clic droit sur ce bloc personnalisé
      assigned_block: "my_pack:workbench_block"
      # OU ouvrir quand un joueur fait clic droit sur ce meuble placé (les deux peuvent être définis)
      assigned_furniture: "my_pack:workbench_item"

      permission:
        required: false
        node: "customizer.craftingtable.basic_workbench"

      gui:
        title: "&8⚒ Etabli Basique"
        rows: 5
        # Emplacements où les joueurs mettent les objets d'entrée
        input_slots: [10, 11, 12, 19, 20, 21, 28, 29, 30]
        # Emplacements où la sortie apparaît
        output_slots: [24]

      behavior:
        return_items_on_close: true   # Retourner les entrées si le GUI est fermé sans artisanat
        consume_inputs: true          # Supprimer les objets d'entrée lors de l'artisanat
        allow_partial_outputs: false

Gestion des tables

CommandeDescription
/zcraft newtableOuvrir l'assistant en jeu pour créer une nouvelle table — définir ID, titre, rangées, déclencheurs, et peindre les emplacements entrée/sortie. Sauvegarde dans la config et recharge instantanément.
/zcraft deletetable <tableId>Supprimer une définition de table de la config et recharger à chaud. Les recettes sauvegardées pour cette table sont conservées dans la base de données.
/zcraft tablesLister toutes les définitions de tables chargées.
/zcraft reloadRecharger les définitions de tables et les recettes depuis le disque sans redémarrer.
/zcraft newtable — assistant de configuration
📚ID table
🏷️Titre
🎵Bloc
🖼️Meuble
1rangée
2rangées
3rangées
4rangées ✓
5rangées
6rangées
🎨Mise en page →
💎Sauver ✓

Ajouter des recettes à une table

Chaque table a sa propre liste de recettes indépendante. Les recettes sont ajoutées par table en utilisant l'ID de la table — le même ID que vous avez défini dans l'assistant ou dans la config.

La table vanilla est une table réservée spéciale dont les recettes fonctionnent dans le vrai établi Minecraft — celui que les joueurs ouvrent en faisant clic droit sur n'importe quel établi normal dans le monde. Ajoutez des recettes avec /zcraft create vanilla <nom> et elles fonctionnent dans tous les établis vanilla du serveur, sans bloc personnalisé ni meuble requis.
Note : basic_workbench est juste une exemple de table dans la config par défaut — ce n'est pas la table d'artisanat vanilla. Elle ne s'ouvre que quand un joueur fait clic droit sur le bloc/meuble personnalisé spécifique que vous lui assignez.
  1. Lancez /zcraft create <tableId> <nomRecette> — ex. /zcraft create my_forge iron_to_steel.
    Cela ouvre le concepteur de recettes pré-chargé avec la disposition exacte des emplacements de cette table.
  2. Placez les ingrédients dans les emplacements d'entrée bleus dans l'arrangement voulu.
  3. Placez l'objet résultat dans l'emplacement de sortie rouge.
  4. Basculez optionnellement le mode Avec forme / Sans forme ou ajoutez un nœud de permission via les boutons de contrôle en bas.
  5. Fermez le GUI — la recette se sauvegarde automatiquement et est active immédiatement. Aucun rechargement nécessaire.

Pour modifier une recette existante, relancez la même commande /zcraft create <tableId> <nomRecette> — cela charge les ingrédients actuels pour que vous puissiez les modifier.

Concepteur de recettes — /zcraft create basic_workbench ma_recette (table 5 rangées)
🌾entrée
🌾entrée
entrée
🌾entrée
🌾entrée
entrée
⚔️sortie
entrée
entrée
entrée
🔀Forme
🔑Perm
💾Sauver
Emplacement d'entrée — placez les ingrédients Emplacement de sortie — placez le résultat Verrouillé — hors de la mise en page

Commandes de recettes

CommandeDescription
/zcraft open [tableId]Ouvrir une table d'artisanat GUI par nom (sans bloc physique).
/zcraft create <tableId> <nom>Ouvrir le concepteur de recettes pour une recette nouvelle ou existante.
/zcraft delete <tableId> <nom>Supprimer une recette sauvegardée par table et nom.
/zcraft list [tableId]Lister toutes les recettes sauvegardées, filtrées optionnellement par table.
/zcraft browse [tableId]Ouvrir le navigateur de recettes GUI, filtré optionnellement sur une table.

→ Documentation complète : Page du module Artisanat Personnalisé

Commandes

Toutes les commandes disponibles dans CustomiZer.

Commandes des joueurs

CommandePermissionCe qu'elle fait
/z guicxp.guiOuvrir le GUI principal de navigation par catégorie
/zitemscxp.itemsNaviguer dans tous les packs et leurs objets
/z get <name>cxp.useVous donner un objet par sa clé
/zrepaircxp.repairRéparer la durabilité personnalisée sur les objets tenus
/zmasterycxp.masteryVoir votre progression de maîtrise
/zmastery <player>cxp.masteryVoir la maîtrise d'un autre joueur
/zmissionscxp.missionsOuvrir votre tableau de missions quotidiennes/hebdomadaires
/zprestigecxp.prestigeOuvrir l'interface de prestige
/zreforgecxp.reforgeOuvrir le GUI de reforgement
/zsocket infocxp.socketVoir les infos d'emplacement de gemme sur l'objet tenu
/zcraftcxp.craftOuvrir l'artisanat personnalisé
/backpackOuvrir le sac à dos tenu en main secondaire ou porté sur le plastron
/zcropCommandes de culture pour les joueurs

Commandes admin

CommandePermissionCe qu'elle fait
/z reloadcxp.reloadRecharger toutes les configurations et reconstruire le pack de ressources
/z give <player> <name>cxp.giveDonner à n'importe quel joueur un objet configuré
/z info <name>cxp.adminAfficher des infos de débogage sur un objet
/zsocket add <gem>cxp.socket.addAjouter un emplacement à l'objet tenu
/zsocket extractcxp.socket.addRetirer une gemme insérée
/zworld reloadcxp.adminRecharger la configuration des générateurs
/zworld generate <world>cxp.adminForcer le peuplement des chunks avec de nouveaux minerais
/zcrop reloadcustomizer.crops.adminRecharger les définitions de culture
/zcrop give <player> <cropId>customizer.crops.admin ou customizer.crops.giveDonner un objet graine de culture plantatble et tagué
/zcraft newtablecxp.craft.adminOuvrir l'assistant de création de table en jeu
/zcraft deletetable <tableId>cxp.craft.adminSupprimer une définition de table et recharger à chaud
/zcraft open [table]cxp.craftOuvrir une table d'artisanat personnalisée par nom
/zcraft create <table> <nom>cxp.craft.adminOuvrir le concepteur de recettes pour une recette nouvelle ou existante
/zcraft delete <table> <nom>cxp.craft.adminSupprimer une recette sauvegardée
/zcraft list [table]cxp.craft.adminLister toutes les recettes d'artisanat sauvegardées
/zcraft reloadcxp.craft.adminRecharger les tables et recettes depuis le disque

Commandes /zpack (Gestion des glyphes & du pack)

Le groupe de commandes /zpack est la boîte à outils principale pour gérer le pack de ressources depuis le jeu. Tous les sous-commandes nécessitent cxp.admin.

CommandeCe qu'elle fait
/zpack reloadpacksAnalyser tous les packs et ré-enregistrer les IDs de modèle sans reconstruire le ZIP
/zpack zipConstruire le ZIP du pack de ressources et l'envoyer à tous les joueurs en ligne
/zpack linkAfficher une URL cliquable vers le pack de ressources Java hébergé
/zpack geyserConstruire le pack de ressources Bedrock + les mappages Geyser dans geyser_output/ — voir le guide Bedrock
/zpack bedrock gui <name> …Ajuster la position GUI pour Bedrock (décalage depuis la position Java)
/zpack bedrock item <name> …Ajuster finement la position/échelle/rotation d'objet 3D par emplacement sur Bedrock
/zpack bedrock furniturescale …Définir la taille du mobilier globalement ou par pièce sur Bedrock
/zpack fontsLister chaque glyphe enregistré — affiche pack, ID, codepoint Unicode, et la balise <font_image:pack:id> à utiliser dans gui.yml
/zpack font <pack> <id>Prévisualiser un glyphe dans votre barre d'action pour vérifier sa taille et position (joueur seulement)
/zpack glyph list [pack]Lister tous les glyphes ; ajouter un nom de pack pour filtrer
/zpack glyph <pack> <id>Infos détaillées sur un glyphe (codepoint, Unicode, balise YAML)
/zpack glyph search <query>Rechercher des glyphes par nom — utile quand vous avez des dizaines d'images de police
/zpack glyph exportAfficher des extraits YAML pour tous les glyphes (utiliser pour verrouiller les codepoints pour qu'ils ne bougent pas)
/zpack glyph regenerateEffacer le registre de glyphes et réattribuer tous les codepoints de zéro
/zpack gui [pack]Déboguer la configuration GUI pour un pack
/zpack rank [pack]Déboguer la configuration de rang / permission de glyphe
/zpack block <pack> <key>Afficher les infos d'enregistrement de bloc
/zpack item <pack> <key>Afficher les infos d'enregistrement d'objet (CMD, matériau, chemin de texture)
/zpack armor <pack> <key>Afficher les infos d'enregistrement d'armure

Permissions

Tous les nœuds de permission et leurs valeurs par défaut.

Nœud de permissionDéfautDescription
cxp.reloadOP seulementExécuter /z reload pour recharger toutes les configurations et reconstruire le pack
cxp.useTout le mondeAccès basique à la commande /z
cxp.giveOP seulementDonner des objets à d'autres joueurs via /z give
cxp.guiTout le mondeOuvrir /z gui (navigateur de catégories principal)
cxp.itemsTout le mondeOuvrir /zitems (navigateur d'objets de pack)
cxp.repairTout le mondeUtiliser /zrepair pour réparer des objets personnalisés
cxp.masteryTout le mondeVoir la progression de maîtrise avec /zmastery
cxp.missionsTout le mondeVoir le tableau de missions avec /zmissions
cxp.prestigeTout le mondeAccéder au prestige avec /zprestige
cxp.reforgeTout le mondeOuvrir le GUI de reforgement avec /zreforge
cxp.socketTout le mondeVoir les infos d'emplacement de gemme avec /zsocket info
cxp.socket.addOP seulementAjouter/supprimer des emplacements sur les objets
cxp.craftTout le mondeUtiliser les tables d'artisanat personnalisées
cxp.craft.adminOP seulementGérer les recettes d'artisanat
cxp.adminOP seulementCommandes admin (/z info, /zpack, /zworld)
customizer.crops.adminOP seulementCommandes admin de culture
customizer.crops.giveOP seulementDonner des graines de culture via /zcrop give
customizer.craftingtable.<name>OP seulementAccéder à une table d'artisanat spécifique (quand permission.required: true)
gem_ranks.<rank_key>Attribué par l'adminAffiche le glyphe de rang pour cette clé de rang (ex. gem_ranks.bronze_amethyst_i)
LuckPerms est le plugin de permissions recommandé. Donnez aux joueurs des groupes comme VIP, MVP, ELITE et le système de temps de recharge/réduction de réparation détectera automatiquement le nom du groupe.