Перейти к основному содержанию

Первая жидкость

Жидкости представляют собой растекающиеся по плоскости блоки, которые обычно затрудняют перемещение существ по ним и образуют течения. К внутреигровым жидкостям относятся вода и лава.

Течения и потоки

Прежде чем создать блок, а точнее пару блоков, давайте рассмотрим как жидкости работают на практике. Любая жидкость от начала своего потока образует течение в радиусе 15 блоков (включая сам поток).

За указанный промежуток времени жидкость равномерно растекается во всех направлениях ровно на блок. Мы называем жидкостью пару блоков — стоячую и текучую. Основной для игры является именно последняя, первая же обозначает источник (поток), и используется при генерации и прочих сценариях, оставаясь сугубо технической.

Зарегистрируем блок

За регистрацию жидкостей отвечает лишь одна комплексная функция:

Block.createLiquidBlock("ink", {
name: "Ink",
tickDelay: 30,
still: {
texture: ["ink", 0]
},
flowing: {
texture: ["ink", 0]
},
bucket: {
texture: { name: "bucket_ink", meta: 0 }
},
uiTextures: ["liquid_ink"]
});

Это создаст текучий и стоячий блоки жидкостей, а также добавит полнофункциональное ведро для использования игроком и разлитием с помощью раздатчиков. Для последнего задействованы функции Item.setLiquidClip и Item.registerDispenseFunction.

Стандарты для создания локализации

Переводы жидкостей создаются как для самого блока жидкости, так и для ведра, размещающего его. Общий формат переводов ничем не отличается от остальных:

Translation.addTranslation("Ink", {
en: "Ink",
ru: "Чернила"
});
Translation.addTranslation("Bucket of Ink", {
en: "Bucket of Ink",
ru: "Ведро чернил"
});

Помимо перевода самого блока, это задаст еще и перевод в интерфейсе, к примеру в моде Recipe Viewer. Не забывайте про переводы, они также важны как и весь добавляемый контент.

Прочие возможности

Любые взаимодействия с жидкостями должны быть обработаны разработчиком, конкретных событий или рекомендаций здесь нет. Рассмотрите LiquidRegistry для получения подробностей.

Дополнительные свойства

Начнем с дополнительных свойств. Прежде всего, жидкости образуют собственные настройки специального типа, изменяя все тот же последний аргумент регистрации блока. Если быть конкретнее, жидкости имеют следующие стандартные настройки:

{
renderlayer: EBlockRenderLayer.BLEND,
rendertype: 4,
material: 5 // если не задан base
}

Эти свойства устанавливаются если не заданы в объекте описания дополнительных свойств, их использование необязательно. Отличительной особенностью регистрации жидкостей является отсутствие возможности использования дополнительных свойств по идентификатору. Они должны быть напрямую переданы в виде объекта.