La commande /loottable n’existe pas
Si vous avez utilisé le constructeur d’objets ou de potions d’ici, la routine est familière : remplir un formulaire, copier une ligne /give, la coller dans le chat, terminé. Cela marche parce qu’un objet est une chose que le jeu peut vous remettre sur-le-champ.
Une table de butin n’est pas une chose que l’on tient. C’est une règle : « quand ce coffre se génère, lance ces probabilités ». Une recette est une règle sur la grille d’artisanat. Un progrès est une règle sur le moment où quelque chose compte comme accompli. Les règles doivent exister avant l’instant auquel elles s’appliquent, donc le jeu les lit au chargement depuis des fichiers sur le disque. Il n’y a ni /loottable, ni /recipe add, ni aucune commande de chat qui les crée, car au moment où vous pourriez la taper, l’instant qu’elle régit est déjà passé.
Toute la distinction tient là :
| Commandes | Data packs | |
|---|---|---|
| Livraison | Coller dans le chat ou un bloc de commande | Fichiers dans un dossier que le monde charge |
| Utile pour | Actions ponctuelles : donner un objet, poser une bossbar, envoyer un message | Règles permanentes : butin, recettes, progrès, fonctions réutilisables |
| Prend effet | Immédiatement | Au chargement du monde ou au /reload |
| Survit au redémarrage | Seulement ses effets | Oui, la règle elle-même persiste |
Ce qu’est réellement un data pack
Un dossier avec un fichier pack.mcmeta tout en haut et un répertoire data en dessous. C’est toute l’exigence. Minecraft l’accepte zippé ou décompressé, et il se place ici :
.minecraft/saves/<monde>/datapacks/<votre-pack>/
pack.mcmeta
data/
harbor/
function/
load.mcfunction
loot_table/
example_chest.json
minecraft/
tags/function/
load.json
Deux espaces de noms apparaissent ici et ils ont des rôles différents. harbor est le vôtre : il évite que vos fichiers entrent en collision avec le vanilla ou avec un autre pack, et il devient partie de chaque identifiant, comme harbor:load. L’espace minecraft sert uniquement à se brancher sur ce que le vanilla définit déjà, c’est pourquoi le tag de chargement y vit et non dans le vôtre.
Le renommage de 1.21 qui casse les packs en silence
Celui-ci mérite sa propre section à cause de sa manière d’échouer. En 1.21, Mojang a renommé tous les répertoires de contenu du pluriel au singulier :
functions→functionadvancements→advancementloot_tables→loot_tablerecipes→recipepredicates→predicateitem_modifiers→item_modifierstructures→structuretags/functions→tags/function
Le mode d’échec est vicieux : un pack utilisant les anciens noms pluriels sur 1.21+ se charge quand même. /datapack list l’affiche comme activé. Aucune erreur. Le jeu ne regarde simplement jamais dans ces dossiers, donc rien de ce que vous avez écrit ne s’exécute. Des gens y perdent des soirées, généralement en suivant un tutoriel écrit avant 1.21.
Si votre pack est activé et ne fait absolument rien, vérifiez d’abord les noms de dossiers, avant de déboguer le JSON qu’ils contiennent.
pack_format est un verrou de version, pas un numéro de version
Le nombre dans pack.mcmeta indique à Minecraft dans quel format de données vos fichiers sont écrits. Mettez-le de travers et le pack est signalé comme incompatible.
{
"pack": {
"pack_format": 61,
"description": "Règles du quartier du port"
}
}
| Version Minecraft | Format de data pack |
|---|---|
| 1.20 – 1.20.1 | 15 |
| 1.20.2 | 18 |
| 1.20.3 – 1.20.4 | 26 |
| 1.20.5 – 1.20.6 | 41 |
| 1.21 – 1.21.1 | 48 |
| 1.21.2 – 1.21.3 | 57 |
| 1.21.4 | 61 |
| 1.21.5 | 71 |
| 1.21.6 | 80 |
| 1.21.7 – 1.21.8 | 81 |
Notez que ce sont les numéros pour les data packs. Les packs de ressources utilisent une échelle distincte, donc un pack_format copié depuis un tutoriel de pack de ressources sera faux ici.
load et tick
Deux points d’accroche couvrent l’essentiel de ce qu’un pack doit faire seul. Vous écrivez un fichier .mcfunction — un simple fichier texte, une commande par ligne, sans slash initial — puis vous pointez un tag dessus.
load s’exécute une fois au chargement du pack et de nouveau à chaque /reload. C’est là qu’on prépare les scoreboards, les constantes et l’état initial. tick s’exécute vingt fois par seconde, indéfiniment, tant que le pack est activé. C’est puissant et c’est la façon la plus simple de ruiner les performances de votre serveur, alors ne l’utilisez que si quelque chose doit vraiment être vérifié en continu.
C’est le fichier de tag qui fait réellement le lien :
// data/minecraft/tags/function/load.json
{
"values": ["harbor:load"]
}
Sans ce tag, la fonction existe toujours et peut être appelée à la main avec /function harbor:load, mais rien ne la lancera pour vous.
Installer et vérifier que ça marche
- Placez le dossier ou le ZIP dans
<monde>/datapacks/. Sur un serveur, ce dossier est à côté delevel.dat. - Lancez
/reloaden jeu. Pas besoin de redémarrer. - Lancez
/datapack list. Votre pack doit apparaître dans la liste des activés.
S’il manque à cette liste, le problème est structurel : un pack_format erroné, un pack.mcmeta malformé, ou un niveau de dossier en trop parce que le ZIP a été créé depuis le répertoire parent au lieu du contenu du pack lui-même. Ce dernier cas est fréquent : pack.mcmeta doit être à la racine de l’archive, pas à l’intérieur d’un autre dossier.
S’il est listé mais que rien ne se passe, la structure est bonne et le problème est à l’intérieur : noms de dossiers au pluriel sur 1.21+, une faute d’espace de noms dans un tag, ou du JSON valide comme texte mais dont la forme n’est pas celle attendue par le jeu.
Pour aller plus loin
Le générateur de data packs construit tout ce squelette pour vous et change automatiquement les noms de dossiers et le pack_format quand vous choisissez une version, ce qui élimine les deux erreurs les plus fréquentes. Ensuite, la référence sur la structure des packs de ressources couvre l’autre moitié de l’écosystème — celle qui change l’apparence du jeu plutôt que son comportement.