Qui n’a jamais râlé quand un enderman a volé un bloc en détruisant sa maison ou sa terraformation ? Jusqu’à maintenant il existait deux solutions pour y contrer. Mais depuis la 1.13, on peut contrôler avec précision les blocs prenables.
Anciennes solutions
Interdire le Grief
La première solution vient d’une gamerule disponible depuis la 1.4.2 :
/gamerule mobGriefing false
Si cette commande a l’avantage d’empêcher les endermen de prendre des blocs, elle empêche également les villageois d’interagir avec le monde. Ce n’est donc pas l’idéal.
Les mains pleines
Une autre solution consiste à remplir les mains des endermen d’un objet invisible.
/entitydata @e[type=Enderman,tag=!a] {carried:minecraft:piston_extension,Tags:["a"]}
Pour cela, on utilise une commande dans un bloc de commande en mode répétition ou dans une fonction chargée à chaque tick. Chaque enderman recevra une extension de piston et sera tagué afin de ne plus en recevoir. L’objet n’étant utilisé que par le jeu pour étendre les pistons, quand l’enderman est tué, l’objet disparaît, ne pouvant pas exister.
Utilisation de tags
Depuis la 1.13, il est possible de créer le tag enderman_holdable afin de lister tous les blocs prenables par les Endermen.
Voici le contenu du fichier du jeu :
{"replace":false,"values":["#minecraft:small_flowers","minecraft:grass_block","minecraft:dirt","minecraft:coarse_dirt","minecraft:podzol","minecraft:sand","minecraft:red_sand","minecraft:gravel","minecraft:brown_mushroom","minecraft:red_mushroom","minecraft:tnt","minecraft:cactus","minecraft:clay","minecraft:pumpkin","minecraft:carved_pumpkin","minecraft:melon","minecraft:mycelium","minecraft:crimson_fungus","minecraft:crimson_nylium","minecraft:crimson_roots","minecraft:warped_fungus","minecraft:warped_nylium","minecraft:warped_roots"]}
Pour personnaliser cette liste, il faut créer dans un datapack le fichier /data/minecraft/tags/blocks/enderman_holdable.json
Fonctionnement des tags
Un tag est un fichier json contenant une liste d’éléments sous forme de tableau. Cela permet par la suite d’exécuter des commandes sans lister toutes les variations. Par exemple, dans la recette du lit, il est possible d’utiliser n’importe quel bois et n’importe quelle couleur de laine. La recette utilise les tags pour connaître les variations possibles. Pour la laine par exemple, le fichier wool.json contient :
{"replace":false,"values":["minecraft:white_wool","minecraft:orange_wool","minecraft:magenta_wool","minecraft:light_blue_wool","minecraft:yellow_wool","minecraft:lime_wool","minecraft:pink_wool","minecraft:gray_wool","minecraft:light_gray_wool","minecraft:cyan_wool","minecraft:purple_wool","minecraft:blue_wool","minecraft:brown_wool","minecraft:green_wool","minecraft:red_wool","minecraft:black_wool"]}
Les tags Minecraft ont un replace à false. Cela ajoute les valeurs listées au tag au lieu de les remplacer.
Il est temps de personnaliser tout ça
Ainsi, si nous souhaitons que nos Endermen puissent prendre des blocs de diamant en plus des blocs actuels, nous pouvons écrire :
{"replace":false,"values":["minecraft:diamond_block"]}
C’est un peu idiot j’en convient, c’était juste pour l’exemple. Si à l’inverse, nous souhaitons que les Endermen ne prennent que des fleurs, nous écrirons :
{"replace":true,"values":["minecraft:dandelion","minecraft:poppy","minecraft:blue_orchid","minecraft:allium","minecraft:azure_bluet","minecraft:red_tulip","minecraft:orange_tulip","minecraft:white_tulip","minecraft:pink_tulip","minecraft:oxeye_daisy"]}
Note bien le “replace : true” qui indique à Minecraft d’ignorer les valeurs par défaut du jeu. Attention, cela écrasera aussi les valeurs des datapacks chargés avant. L’ordre de chargement des datapacks est donc important.
Enfin, tu l’auras peut-être compris, pour empêcher les Endermen de prendre des blocs, il suffit de créer un fichier avec une liste vide. Toujours dans ton datapack, créé le fichier /data/minecraft/tags/blocks/enderman_holdable.json avec ce contenu :
{"replace":true,"values":[]}
Téléchargement
Le datapack de ce tuto est disponible au téléchargement sur Dropbox :