Привет. В этот раз хочу рассказать как оживить блоки и предметы посредством анимированных текстур. Ведь иногда статические текстуры не выражают всю суть элемента игры. Вот какая была бы из воды вода, если б текстура не двигалась? Не интересно.
Список уроков
Тринадцатый урок. Стекло
Бонусный. Меняем имя блока. Моддинг Minecraft
ВАЖНО! Это работает только для блоков и предметов. Но не для мобов и всяких там сущностей вроде сундуков и т.д.
Для этого урока я создал один новый блок и один новый предмет (вот уроки, если забыли как БЛОК, ПРЕДМЕТ). Но вы можете попробовать изменить текстуру своего существующего блока, так как java в этом уроке затронута не будет.
Текстуры
Для создания анимации в minecraft нам нужно создать текстуру со всеми кадрами будущего блока (или предмета). К примеру у вас есть такая текстура:
Кстати, это текстура и правду из далекого 2018. Тогда мне было скучно и я решил написать что-то для майна. Идея была: разнообразить мир, добавить особых существ и что-то новое для дня и ночи и, конечно же, кучу связанных с ними предметов. Очень оригинально, знаю. В любом случае мод я благополучно забросил, но сейчас я нашел старые текстуры и (как видите по названиям элементов в уроках) решил немного развить былые идеи.
Ну ладно. Вот есть у вас обычная текстура, и вы хотите её анимировать. Для этого в одном файле добавляем все необходимые кадры. Поняли? Ну вот пример:
Вместо одной текстуры 16х16 был создан такой столбик из четырех текстур 16х64. Именно так выглядит любая анимация в игре. И да, это был не конечный вариант, но я был в поиске.
После пары запусков и экспериментов с текстурами я таки придумал, что же я хочу увидеть. Вышло или нет я не уверен, но для урока по анимации пойдет идеально :D. В этой текстуре пять текстурок блоков, а её размеры 16х80 пикселей.
Если эта текстура указана блоку, то она будет разбита на 5 частей 16х16, которые будут наложены на блок, поочередно меняясь.
Считаем мы текстуры с 0. Т.е. у меня пять текстур, но номер последней — 4. Если уже знакомы с программированием (а я надеюсь, что да), то уже знакомы с этой фишкой (массивы там, строки, все дела).
Но не все так просто!
Игра не настолько умна, чтобы понять, где анимация, а где просто широкая текстура. Чтобы сказать игре «эй! Тут анимация» нам нужно добавить новый файл. Прям в папке с текстурами. Этот файл с правильным форматом можно создать прям в IDE, а можно использовать софт вроде Notepad++.
И в этот волшебный файлик пишем такой вот код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "animation": { "frametime": 5, "interpolate": true, "frames": [ 0, 2, 4, 1, 3, 0, 1, 2, 3, 4, 3, 2, 1 ] } } |
Раньше, до 1.5 можно было бросить пустой файлик .mcmeta, а игра уже сама что-то придумывала. Но сейчас его заполнение обязательно.
Объект animation содержит frametime, определяющий частоту смены кадра. Чем больше число — тем медленнее будет анимация. Frames у нас определяет как именно будут показаны кадры. Можно лишние исключить (просто их не писать), или же написать что-то вроде 012321, чтобы создать плавное возвращение к изначальному кадру и т.д. Я набросал случайных, просто так. Потому что могу.
И, как я понял, interpolate — сглаживание кадров при переходе, но я не уверен.
Кстати, вместо номера кадра вы так же можете указать такую конструкцию:
1 2 3 4 |
{ "index": 3, "time": 20 } |
И тогда ваша 4 текстура будет отображаться столько тиков (1/20 секунды), сколько указано в time.
Собираем всё вместе
Я показал вам анимацию для блока. Для предмета анимация точно такая же, но текстуру для примера я взял с англоязычного форума по моддингу.
И написал вот такую анимацию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{ "animation": { "frametime": 10, "interpolate": true, "frames": [ { "index": 0, "time": 20 }, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ] } } |
Всё, запускаем, смотрим.
Сегодня без трона, так как блоки были для примера, а вот позже будет блок будет с анимацией, и он даже попадёт на трон. Не переключайтесь 😀