Mise à jour :

1. Créer la clé

/give @s tripwire_hook[custom_data={key:1b},custom_name="Clé du coffre-fort"]

La donnée personnalisée key:1b marque la vraie clé : une copie renommée à l'enclume ne marche donc pas. En 1.21.4 et antérieur, écrivez le nom ainsi : custom_name='"Clé du coffre-fort"'.

2. Porte et marqueur

Posez une porte en fer. Placez-vous dans sa moitié basse et invoquez un marqueur dans le bloc juste en dessous :

/summon marker ~ ~-1 ~ {Tags:["keydoor"]}

3. Trouver les porteurs de clé (Répétition)

/tag @a remove near_key
/execute at @e[type=marker,tag=keydoor] as @a[distance=..3] if items entity @s weapon.* *[custom_data~{key:1b}] run tag @s add near_key

weapon.* vérifie les deux mains, et custom_data~{key:1b} correspond aux objets qui contiennent key:1b.

4. Ouvrir et fermer (Répétition)

/execute at @e[type=marker,tag=keydoor] if entity @a[tag=near_key,distance=..3] run setblock ~ ~ ~ redstone_block
/execute at @e[type=marker,tag=keydoor] unless entity @a[tag=near_key,distance=..3] run setblock ~ ~ ~ stone

Un bloc de redstone sous la porte l'ouvre, et de la pierre la referme. Chaque porte marquée fonctionne indépendamment.

5. Clés à usage unique

/execute at @e[type=marker,tag=keydoor] as @a[tag=near_key,distance=..3] run clear @s tripwire_hook[custom_data~{key:1b}] 1

Retirez la ligne de fermeture de l'étape 4 et enchaînez celle-ci après la ligne d'ouverture. La porte reste ouverte et une clé est consommée.

6. Des clés différentes pour des portes différentes

Utilisez custom_data={key:2b} et un tag de marqueur keydoor2, puis copiez les étapes 3 et 4 avec ces valeurs.

7. Porte automatique sans clé

execute at @e[type=marker,tag=keydoor] if entity @a[distance=..3] run setblock ~ ~ ~ redstone_block
execute at @e[type=marker,tag=keydoor] unless entity @a[distance=..3] run setblock ~ ~ ~ stone

Pour une porte qui s'ouvre pour n'importe qui à proximité, sautez l'étape 3 et retirez tag=near_key, de l'étape 4. Bedrock n'a pas de marqueur : écrivez directement la position et utilisez r au lieu de distance : execute if entity @a[x=10,y=64,z=10,r=3] run setblock 10 63 10 redstone_block.

Dépannage

Vérifiez votre commande

Le Command Error Doctor (en anglais) vérifie dans votre navigateur les erreurs de syntaxe les plus courantes.