API

Shader packs

Un shader pack cambia el aspecto de toda la imagen: colores, luz y efectos. Son datos, no un mod: el jugador lo instala copiando su carpeta.

Instalar un pack

Copia la carpeta del pack en shaderpacks/, dentro de la carpeta del juego. El mismo pack sigue funcionando cuando Minecraft se actualiza, porque Crafting lo adapta al juego.

Texto
shaderpacks/sepia/
├── shaderpack.json
├── tone.glsl
└── vignette.glsl

El archivo del pack

shaderpack.json da nombre al pack y lista sus pasadas. Se ejecutan en orden, cada una sobre la imagen que produjo la anterior.

shaderpacks/sepia/shaderpack.jsonJSON
{ "name": "Sepia", "passes": ["tone.glsl", "vignette.glsl"] }

Una pasada

Una pasada es un archivo GLSL con una sola función:

shaderpacks/sepia/tone.glslGLSL
vec4 effect(vec4 color, vec2 uv) {
    float grey = dot(color.rgb, vec3(0.299, 0.587, 0.114));
    return vec4(grey * 1.07, grey * 0.74, grey * 0.43, 1.0);
}

color es el color del píxel y uv su posición en la pantalla, de (0, 0) a (1, 1). La función devuelve el color nuevo. En todas las pasadas hay además tres cosas disponibles:

Nombre Qué te da
crafting_scene(uv) lee la imagen en cualquier posición: desenfoque, bordes, distorsión
crafting_screen el tamaño de la pantalla en píxeles (vec2)
crafting_time el tiempo en segundos: animaciones, pulsos

Más ejemplos

Una viñeta que oscurece las esquinas:

shaderpacks/sepia/vignette.glslGLSL
vec4 effect(vec4 color, vec2 uv) {
    vec2 d = uv - 0.5;
    d.x *= crafting_screen.x / crafting_screen.y;
    float v = smoothstep(0.85, 0.25, length(d));
    return vec4(color.rgb * v, 1.0);
}

Una onda suave, con crafting_time y crafting_scene:

shaderpacks/sepia/wave.glslGLSL
vec4 effect(vec4 color, vec2 uv) {
    vec2 shift = vec2(sin(uv.y * 30.0 + crafting_time * 2.0) * 0.002, 0.0);
    return crafting_scene(uv + shift);
}

Elegir el pack

En la carpeta del juego, abre config/crafting/client.toml y pon en shader_pack el nombre de la carpeta del pack. Vacío significa ninguno. Luego inicia el juego.

config/crafting/client.tomlTOML
shader_pack = "sepia"

El pack se aplica dentro de los mundos; los menús se ven normales.

Cuando una pasada tiene un error

El juego muestra un aviso de recursos y la imagen se queda normal. El log del juego dice qué falla, en qué archivo y en qué línea.