API

Наборы шейдеров

Набор шейдеров меняет вид всего изображения: цвета, свет и эффекты. Это данные, а не мод: игрок устанавливает его, копируя его папку.

Установка набора

Скопируй папку набора в shaderpacks/ в папке игры. Тот же набор продолжает работать после обновления Minecraft, потому что Crafting адаптирует его к игре.

Текст
shaderpacks/sepia/
├── shaderpack.json
├── tone.glsl
└── vignette.glsl

Файл набора

shaderpack.json задаёт имя набора и перечисляет его проходы. Они выполняются по порядку, каждый над изображением, полученным от предыдущего.

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

Проход

Проход — это файл GLSL с одной функцией:

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 — цвет пикселя, а uv — его положение на экране, от (0, 0) до (1, 1). Функция возвращает новый цвет. В каждом проходе доступны ещё три вещи:

Имя Что даёт
crafting_scene(uv) читает изображение в любой позиции: размытие, границы, искажение
crafting_screen размер экрана в пикселях (vec2)
crafting_time время в секундах: анимации, пульсации

Ещё примеры

Виньетка, затемняющая углы:

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

Лёгкая волна с crafting_time и 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);
}

Выбор набора

В папке игры открой config/crafting/client.toml и впиши в shader_pack имя папки набора. Пусто означает «нет». Затем запусти игру.

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

Набор действует внутри миров; меню выглядят как обычно.

Если в проходе ошибка

Игра показывает предупреждение о ресурсах, а изображение остаётся обычным. Журнал игры говорит, что не так, в каком файле и в какой строке.