El sensor de luz, tanto en modo normal como invertido, está más relacionado con el nivel de luz que recibe que con el tiempo exacto del día. Así que, como tú bien dices, no es el método apropiado para lo que realmente necesitas.
Sí que lo es, en cambio,
la función query del comando /time, con la que podrás extraer el instante exacto del día al ejecutarlo.
El comando
/time query se comporta de la siguiente manera:
- /time query daytime: muestra el valor exacto de la hora del día. Es un ciclo que va desde 0 hasta 23999. Puedes ver más detalles aquí: github.com/KaliNuska/Minecraft/blob/master/Table of daytimes.md
- /time query gametime: muestra el valor exacto del tiempo total del mapa. Comienza desde 0 al crear el mapa y avanza cada tick. Es algo así como la edad de un mapa.
- /time query day: muestra el número del día en el que se juega. Incrementa en 1 cada vez que comienza un día.
El valor que se obtiene después de ejecutar el comando /time query puede integrarse en un scoreboard empleando el comando /stats block para una entidad de la siguiente forma:En primer lugar debes crear el scoreboard que almacenará los datos del tiempo:
/scoreboard objectives add dayTime dummy Day Time
Puedes mostrar este scoreboard en el sidebar para su mayor manejabilidad:
/scoreboard objectives setdisplay sidebar dayTime
Para el correcto funcionamiento, introduce primero un valor para el scoreboard a la entidad que vayas a utilizar para almacenar los valores del día:
/scoreboard players add @a dayTime 0
La parte más delicada consiste en ejecutar bien el siguiente comando una única vez. Para ello deberás
colocar un bloque de comandos (al que le añadirás más adelante el último de esta lista de comandos
/time query daytime) y
obtener sus coordenadas para introducirlas en
<x>,
<y> y
<z>. Además, el selector de objetivo debe encontrar
una única entidad que posee un valor previo en el mismo scoreboard:
/stats block <x> <y> <z> set QueryResult @p dayTime
Cada vez que ejecutes este último comando, en el bloque que colocaste en el paso anterior, se actualizará el valor del tiempo almacenado en el scoreboard:
/time query daytime
Cuando tengas todo esto en marcha,
para comprobar que es una hora determinada basta con utilizar el argumento score para el selector de objetivo de un comando /execute, por ejemplo:
/execute @p[score_dayTime_min=13004,score_daytime=13004] ~ ~ ~ /gamerule doDaylightCycle false
Si necesitas ayuda no dudes en contestar 