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

Comprueba tu comando

El Command Error Doctor (en inglés) revisa en tu navegador los errores de sintaxis más comunes.