API

Pacotes de shaders

Um pacote de shaders muda o aspecto de toda a imagem: cores, luz e efeitos. São dados, não um mod: o jogador o instala copiando a pasta dele.

Instalar um pacote

Copie a pasta do pacote para shaderpacks/, dentro da pasta do jogo. O mesmo pacote continua funcionando quando o Minecraft atualiza, porque o Crafting o adapta ao jogo.

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

O arquivo do pacote

shaderpack.json dá o nome ao pacote e lista suas passagens. Elas rodam em ordem, cada uma sobre a imagem que a anterior produziu.

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

Uma passagem

Uma passagem é um arquivo GLSL com uma única função:

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 é a cor do pixel e uv sua posição na tela, de (0, 0) a (1, 1). A função devolve a nova cor. Em todas as passagens há ainda três coisas disponíveis:

Nome O que ele oferece
crafting_scene(uv) lê a imagem em qualquer posição: desfoque, bordas, distorção
crafting_screen o tamanho da tela em pixels (vec2)
crafting_time o tempo em segundos: animações, pulsos

Mais exemplos

Uma vinheta que escurece os cantos:

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);
}

Uma onda suave, com crafting_time e 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);
}

Escolher o pacote

Na pasta do jogo, abra config/crafting/client.toml e defina shader_pack como o nome da pasta do pacote. Vazio significa nenhum. Depois inicie o jogo.

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

O pacote vale dentro dos mundos; os menus ficam normais.

Quando uma passagem tem um erro

O jogo mostra um aviso de recursos e a imagem continua normal. O log do jogo diz o que está errado, em qual arquivo e em qual linha.