Actualizado:
Ejecutar una función dentro de cinco segundos
/schedule function mypack:explode 5s
mypack:explode es la función de data/ (la carpeta se llamaba functions antes de la 1.21).
Unidades de tiempo
| Escritura | Significado |
|---|---|
20t o 20 | 20 ticks (1 segundo) |
5s | 5 segundos (100 ticks) |
1d | Un día del juego (24000 ticks, unos 20 minutos) |
Un bucle que se repite
# data/mypack/function/loop.mcfunction
effect give @a minecraft:regeneration 3 0 true
schedule function mypack:loop 10s
La función se vuelve a programar al final. Ejecuta /function mypack:loop una vez y se repetirá cada 10 segundos, algo más ligero que ejecutar algo cada tick.
Cancelar una programación
/schedule clear mypack:loop
Las programaciones se guardan con el mundo, así que continúan tras recargar hasta que las canceles.
replace y append
| Comando | Si la función ya está programada |
|---|---|
/schedule function mypack:a 5s replace | Sustituye la programación anterior (por defecto) |
/schedule function mypack:a 5s append | Mantiene la anterior y añade otra |
Quién ejecuta la función
Una función programada se ejecuta como el servidor, en el punto de aparición del mundo, no como el jugador que la programó. Por tanto, @s y ~ ~ ~ no apuntan a un jugador. Usa execute as @a at @s run … dentro de la función para actuar sobre cada jugador.
Una cuenta atrás 3-2-1
# data/mypack/function/start.mcfunction
title @a title "3"
schedule function mypack:count2 1s
# data/mypack/function/count2.mcfunction
title @a title "2"
schedule function mypack:count1 1s
# data/mypack/function/count1.mcfunction
title @a title "1"
schedule function mypack:go 1s
# data/mypack/function/go.mcfunction
title @a title {"text":"¡YA!","color":"green"}
Cada función muestra un número y programa la siguiente un segundo después. Para empezar la ronda solo hace falta /function mypack:start.
Retrasar una acción para un jugador
Como la función programada no sabe quién la empezó, marca antes al jugador con una etiqueta:
# cuando el jugador pisa la trampa
tag @s add trapped
schedule function mypack:release 5s
# data/mypack/function/release.mcfunction
tp @a[tag=trapped] 0 64 0
tag @a remove trapped
Si un segundo jugador la activa en menos de cinco segundos, el replace por defecto reinicia el temporizador y los dos jugadores se liberan a la vez. Para un temporizador distinto por jugador, cuenta ticks en un scoreboard.
Bedrock Edition
Bedrock tiene /function y /schedule, pero su /schedule funciona de otra forma (se creó para ejecutar funciones cuando se carga una zona) y no acepta la sintaxis de esta página. Contar ticks con un scoreboard es la forma fiable de retrasar acciones en Bedrock.
Problemas frecuentes
- Función desconocida: ejecuta
/reload, revisa/datapack listy comprueba el nombre de la carpeta (functionen 1.21+). - @s no hace nada: consulta "Quién ejecuta la función" más arriba.
- El bucle no se detiene nunca: usa
/schedule clear.
Comprueba tu comando
El Command Error Doctor (en inglés) revisa en tu navegador los errores de sintaxis más comunes.