Actualizado:
1. Crear la llave
/give @s tripwire_hook[custom_data={key:1b},custom_name="Llave de la cámara"]
El dato personalizado key:1b marca la llave auténtica, así que una copia renombrada en el yunque no sirve. En 1.21.4 y anteriores escribe el nombre como custom_name='"Llave de la cámara"'.
2. Puerta y marcador
Coloca una puerta de hierro. Ponte en su mitad inferior e invoca un marcador en el bloque de debajo:
/summon marker ~ ~-1 ~ {Tags:["keydoor"]}
3. Detectar a quien lleva la llave (iterativo)
/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.* revisa las dos manos y custom_data~{key:1b} coincide con los objetos que contienen key:1b.
4. Abrir y cerrar (iterativo)
/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 bloque de redstone bajo la puerta la abre y la piedra la vuelve a cerrar. Cada puerta marcada funciona por separado.
5. Llaves de un solo uso
/execute at @e[type=marker,tag=keydoor] as @a[tag=near_key,distance=..3] run clear @s tripwire_hook[custom_data~{key:1b}] 1
Quita la línea de cierre del paso 4 y pon esta en cadena tras la línea de apertura. La puerta queda abierta y se gasta una llave.
6. Llaves distintas para puertas distintas
Usa custom_data={key:2b} y una etiqueta de marcador keydoor2, y copia los pasos 3 y 4 con esos valores.
7. Puerta automática sin llave
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
Para una puerta que se abra a cualquiera que esté cerca, sáltate el paso 3 y quita tag=near_key, del paso 4. Bedrock no tiene marcadores, así que escribe la posición directamente y usa r en lugar de distance: execute if entity @a[x=10,y=64,z=10,r=3] run setblock 10 63 10 redstone_block.
Solución de problemas
- La puerta no se abre: comprueba que el marcador está justo debajo de la puerta.
- La llave se ignora: da una llave nueva con el paso 1.
- Bedrock Edition: usa el argumento de selector hasitem.
Comprueba tu comando
El Command Error Doctor (en inglés) revisa en tu navegador los errores de sintaxis más comunes.