Minecraft Wiki
Advertisement
Para el comando, véase Comandos/function.
Véase también: Función (Bedrock Edition)
Information icon
Esta característica es exclusiva de Java Edition. 

Las Funciones permite a los jugadores hacer correr listas de comandos usando archivos de texto con la extensión .mcfunction. Se recomienda utilizar codificación ANSI (sin BOM) para los archivos de funciones para prevenir cualquier problema. Esta página cubre cómo utilizar las funciones en Java Edition.

Uso[]

Para utilizar funciones, un archivo de texto [FUNCTION_NAME].mcfunction deberá ser colocado en la carpeta [WORLD_NAME]/datapacks/[DATA_PACK_NAME]/data/[NAMESPACE]/functions. Para ejecutar la función, utilice el nombre de función completo, que es [NAMESPACE]:[FUNCTION_NAME]. Si no hay ambigüedad con otros paquetes de datos o con un comando de Minecraft existente, puedes usar [FUNCTION_NAME]. Si el espacio de nombres se omite al intentar llamar a una función, se establecerá de manera predeterminada en el espacio de nombres minecraft:. Se recomienda usar un espacio de nombres personalizado para evitar un comportamiento no deseado en el caso de futuras adiciones al espacio de nombres predeterminado.[1]

Las funciones también se pueden colocar en subcarpetas dentro de la carpeta functions. También es necesario tener un archivo pack.mcmeta en la carpeta [DATA_PACK_NAME]. Por ejemplo, ejecutar la función custom:example/test hará referencia al archivo ubicado en data/custom/functions/example/test.mcfunction.

Las funciones, al ser archivos de texto, son fácilmente modificables y es menos probable que los bloques de comandos induzcan retrasos cuando se usan en grandes cantidades. Si se modifica o agrega una función, usar el comando /reload recargará los archivos de función desde el disco. Esto permite que Minecraft reconozca cualquier cambio en los archivos de funciones, sin necesidad de salir y volver a entrar al mundo.

Upon successfully running /function, a message will display in the chat: Executed [amount] command(s) from function '[function file directory]'. Embedded functions won't display this chat messsage. The successful output of the commands inside a function cannot be measured with a comparator (although the same effect could be accomplished with the use of /execute store command).

In a singleplayer or a LAN world, like a command block, a function can run any command that is no more restrictive than permission level 2.

On the default multiplayer software, a function can run any command that is no more restrictive than the permission level prescribed in function-permission-level setting in server.properties.

Sintaxis de la función[]

TestingFunctions

Probando el sistema de funciones. En esta función simple se utilizaron tres mensajes /tellraw y un comando /give.

Dentro del archivo .mcfunction, se coloca un comando válido por línea, sin la barra inclinada habitual (/). Los jugadores pueden agregar comentarios dentro del archivo de texto de función comenzando una línea con #.

Los comandos individuales en las funciones pueden tener más de 32 500 caracteres como límite en los bloques de comandos, pero la cantidad total de comandos que se ejecutan dentro de una función seguirá obedeciendo a /gamerule maxCommandChainLength, que es 65 536 comandos de forma predeterminada; cualquier comando más allá de este límite será ignorado.

Ejecutando una función[]

Las funciones ejecutarán todos sus comandos en un solo tick y las funciones llamadas desde dentro de otras funciones también ejecutarán sus comandos en el mismo tick que su padre. Las funciones utilizarán el entorno de comandos de lo que sea que haya llamado a la función. Esto incluye el remitente del comando, la posición, la rotación, etc. Este contexto de comando se conserva para todos los comandos de la función, por lo que un comando /setblock utilizará el contexto de posición guardado incluso cuando un comando anterior en la misma función se teletransportó el albacea original a una posición diferente. Por ejemplo:

execute as @a at @s run function foo:bar

foo:bar

teleport @s ~ ~5 ~
setblock ~ ~-1 ~ emerald_block
execute at @s run setblock ~ ~-1 ~ diamond_block

Cuando se llama a través de un jugador, esta función teletransportará a ese jugador 5 bloques hacia arriba, colocará un bloque de esmeralda un bloque debajo de su posición original antes del teletransporte, y colocará un bloque de diamante un bloque debajo de su nueva posición después del teletransporte.

Como se ve en el ejemplo anterior, el contexto del comando se puede actualizar como de costumbre mediante sus respectivos subcomandos /execute.

Se sugiere usar el @s seleccionador de objetivos para la entidad más utilizada en una función y usar /execute como al llamar esa función para modificar la entidad ejecutora a la entidad más utilizada. Esto puede simplificar el contenido si la entidad se seleccionó con argumentos del selector de destino y mejorar el rendimiento en general para la iteración reducida a través de la lista de entidades mundiales.

Hay varios métodos para ejecutar un archivo de función en el juego:

Commands[]

/function
  • Permite a los jugadores ejecutar una función o todas las funciones en una etiqueta de función una vez.
  • Utiliza el entorno de comandos de lo que sea que se llame el comando /function.
  • El entorno de comando inicial puede ser modificado por el comando /execute.
  • Usage: /function <name>

Progresos[]

Los progresos pueden ejecutar una función una vez como recompensa por completarlos. Los comandos en la función se ejecutan a través del jugador que completó el avance.

Las funciones de recompensa se llaman dentro de los archivos de avance JSON usando el siguiente formato:

{
    "rewards": {
        "function": "namespace:path/to/function/file"
    }
}

Etiquetas[]

Las funciones se pueden agrupar usando etiquetas en paquetes de datos. Estas etiquetas se pueden llamar para ejecutar todas las funciones dentro de esa etiqueta con /function #(namespace):(tag).

Las funciones etiquetadas en tick ejecutarán automáticamente cada tick al comienzo del tick. Las funciones etiquetadas en load se ejecutarán después de (re)cargar el paquete de datos.

  • Nota: tick se ejecutará antes de load después de volver a cargar el paquete de datos. Esto significa que no puede confiar inherentemente en un estado estable del paquete de datos para el primer tic.

Historial[]

Java Edition
1.12pre1Funciones añadidas.
pre3Ya no se permite que los comandos comiencen con / (barra inclinada)
Los comentarios ahora solo pueden ir precedidos de #; usar // ya no está permitido
pre4Se agregaron nuevos argumentos al comando /function: [if|unless] [selector]
pre6Las funciones omitidas (cuando falla un condicional) ahora se consideran fallas cuando se usan en los comandos.
1.1317w43aLas funciones personalizadas se han movido a paquetes de datos.
17w45aLas funciones ahora se analizan por completo y se almacenan en caché durante la carga.
17w49bSe eliminó /gamerule gameLoopFunction.
La función ahora se puede etiquetar.
Las funciones etiquetadas en tick ahora ejecutan cada tick al comienzo del tick .
18w01aLas funciones etiquetadas en load ahora se ejecutan después de (re)cargar el paquete de datos.
1.14.4pre4Se agregó function-permission-level a server.properties

Problemas[]

Los problemas relacionados con "función (java edition)" se mantienen en el rastreador de problemas.

Informa en esta página sobre los errores que encuentres (en inglés).

Referencias[]

Advertisement