Перейти к содержанию
В разделе "Гайды" запрещено задавать вопросы по Майнкрафту.

[ГАЙД] на GUI анимацию датапаком + ресурспаком


Рекомендуемые сообщения

В теме 2 сообщения

Для фокуса нам понадобится датапак и ресурспак, хотя всё что тут показано можно сделать и на командах (но мне лень это показывать). Обычно когда речь заходит об выведении изображений на экран, все вспоминают unicode символы, но я - ДуРаЧёК, по этому буду эксплуатировать немного другую механику. Вспомните тыкву, при надевании на голову, тыква выводит на экран изображение своих ПрОрЕзЕй. Мало кто знает, но в маине можно выдать предмет с любым подобным изображением. Введите команду /give @p minecraft:cod[equippable={slot:mainhand,camera_overlay:"minecraft:item/cod"}] чтобы понять о чём я говорю.

Теперь перейдём к реализации: Начнём с ресурспака, с ним разобраться быстрее.
1. Нарисуйте анимацию с любым количеством кадров, но максимум 20 кадров в секунду. В качестве референса можете использовать моё изображение. Мой хомяк кричит в Full HD потому что это самое распространенное разрешение экрана у людей. Но весь кайф этой механики заключается в том, что изображение автоматически растягивается под разрешение каждого человека. По этому люди смогут наслаждаться этим хомячком на любых мониторах и всё будет выглядеть замечательно. 

                               image.thumb.gif.7391f0964c6c7665e96d9692b742f3d4.gif

После того как мы нарисовали все кадры анимации, запихивайте каждый кадр по отдельности в формате PNG в папку assets\minecraft\textures\item\название_кадра. ДА этот гайд рассчитан на тех кто уже умеет создавать ресурспаки и датапаки. Если вы не умейте, то научитесь и возвращайтесь обратно к гайду, я вас жду. Выглядеть должно примерно как кадр1.png кадр2.png кадр3.png кадр4.png кадр5.png и как далее. Также можно запихнуть файлы не в textures\item а вообще куда угодно, но для примера я выбрал такую папку. Теперь попробуйте выдать себе предмет с вашей текстуркой /give @p minecraft:cod[equippable={slot:mainhand,camera_overlay:"minecraft:item/название кадра"}]. и возьмите его в руку. Если на экране ваше изображение, то всё норм, если экран чёрно фиолетовый, значит игра не может найти текстурку, проверьте правильность ресурспака.

Поздравляю вас, на этом работа с ресурспаком окончена, остался датапак. Возрадуйтесь ибо в датапаке нас интересуют только функции!

А теперь самое время сообщить о том что способ имеет один явный недостаток - для вывода изображения, необходимо либо держать предмет в руке, либо иметь его в слоте с бронёй. По этому первой функцией нами написанной станет функция снятия шапки, у меня она имеет название head_drop.mcfunction

execute as @s at @s run summon minecraft:item ~ ~ ~ {Item:{id:"minecraft:paper"},Tags:["set_head"],PickupDelay:0s}
execute as @e[tag=set_head,type=item,nbt={Item:{id:"minecraft:paper"}}] run data modify entity @s Item set from entity @p equipment.head
execute as @e[tag=set_head,type=item,nbt={Item:{id:"minecraft:paper"}}] run kill @s
item replace entity @s armor.head with air

Работает она просто - Предмет спавнится под ногами игрока и копирует дату о предмете на его голове, тем самым превращается в его копию. Дальше голова игрока чистится. И по итогу он как будто бы снял шапку. Теперь когда чело обнажено, мы можем переходить к самому главному - К функции анимации. У меня она называется head_animation1.mcfunction и таких функций с разными анимациями вы можете создать сколько угодно, они не будут нагружать мир, так как воспроизводиться будут только во время их показа.

execute as @s unless items entity @s armor.head * [minecraft:custom_data={Tags:["animka1"]}] run function pack:head_drop
execute as @s unless items entity @s armor.head * [minecraft:custom_data={Tags:["animka1"]}] run scoreboard players reset @s animka
execute as @s unless items entity @s armor.head * [minecraft:custom_data={Tags:["animka1"]}] run item replace entity @s armor.head with minecraft:paper[minecraft:enchantments={'minecraft:binding_curse':1},minecraft:custom_data={Tags:["animka1"]}]

scoreboard players add @s animka 1

execute as @s[scores={animka=5}] run item modify entity @s armor.head {function:"minecraft:set_components",components:{"minecraft:equippable":{slot:"head",camera_overlay:"minecraft:item/название первого кадра"}}}

execute as @s[scores={animka=10}] run item modify entity @s armor.head {function:"minecraft:set_components",components:{"minecraft:equippable":{slot:"head",camera_overlay:"minecraft:item/название второго кадра"}}}

execute as @s[scores={animka=15}] run item modify entity @s armor.head {function:"minecraft:set_components",components:{"minecraft:equippable":{slot:"head",camera_overlay:"minecraft:item/название третьего кадра"}}}

execute as @s[scores={animka=20}] run item modify entity @s armor.head {function:"minecraft:set_components",components:{"minecraft:equippable":{slot:"head",camera_overlay:"minecraft:item/ну и так далее"}}}

execute as @s[scores={animka=25}] run item modify entity @s armor.head {function:"minecraft:set_components",components:{"minecraft:equippable":{slot:"head",camera_overlay:"minecraft:item/логику ты понимаешь"}}}

execute as @s[scores={animka=30}] run item modify entity @s armor.head {function:"minecraft:set_components",components:{"minecraft:equippable":{slot:"head",camera_overlay:"minecraft:item/и таких кадров может быть бесконечность"}}}

execute as @s[scores={animka=35}] run item replace entity @s armor.head with air
execute as @s[scores={animka=35..}] run scoreboard players reset @s animka

Первые 3 строки связаны с выдачей особого предмета, через которого и будет происходить показ анимации. Если вы намерены делать больше одной анимки, то учитывайте что для каждой должна быть своя функция ( head_animation1head_animation2head_animation3 ... ) и свой тег у предмета ( animka1 , animka2 , animka3 ... ).

Теперь когда на голове игрока предмет с тегом, эта функция будет срабатывать для него каждый тик, и строчка scoreboard players add @s animka 1 будет каждый раз прибавлять единичку в скорборд игрока (скорборд это что-то типо калькулятора).

Следующие строки это и есть сама анимация. Мы проверяем какая цифра у игрока в скорборде (то есть сколько тиков прошло с момента её запуска) и меняем кадр, в одной секунде 20 тиков. Анимация в моём примере меняет кадр каждые 5 тиков и делает это при помощи /item modify, эта команда меняет дату предмета. Чтобы понять о чём я говорю введите команду /item modify entity @s weapon.mainhand [{function:"minecraft:set_name",name:"скебоб"}] держа в руке любой предмет и он поменяет своё название.

Последние 2 строки нужны для того чтобы остановить анимацию и обнулить скорборд, сделать это можно на любой секунде. Ваша анимация может длиться хоть целый час, вообще пофиг, вот только голова игрока будет занята предметом.

Теперь перед тем как тестировать функцию, нам нужно ещё кое что сделать. Если вы умейте создавать датапаки то знайте про функции tick и load (они могут иметь другие названия), одна срабатывает при запуске мира, а другая каждый тик подобно цикличному командному блоку. В той функции что срабатывает при запуске мира вы должны написать следующую строчку. 

scoreboard objectives add animka dummy "кадры"

Она создаст скорборд который нужен для замера времени. Чтобы его увидеть, напишите команду /scoreboard objectives setdisplay sidebar animka. А в ту функцию что срабатывает каждый тик, пишите это

execute as @a if items entity @s armor.head * [minecraft:custom_data={Tags:["animka1"]}] run function pack:head_animation1

#Если у вас несколько анимаций, это будет выглядеть примерно так:
execute as @a if items entity @s armor.head * [minecraft:custom_data={Tags:["animka2"]}] run function pack:head_animation2
execute as @a if items entity @s armor.head * [minecraft:custom_data={Tags:["animka3"]}] run function pack:head_animation3
execute as @a if items entity @s armor.head * [minecraft:custom_data={Tags:["animka4"]}] run function pack:head_animation4

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

Поздравляю! Мы сделали анимацию (я по крайней мере) теперь не забудьте прописать /reload и можете её запускать. Чтобы это сделать пропишите /function pack:head_animation1 или какое там название вы дали своим функциям. Этот механизм работает обособленно для всех игроков, довольно простой, имеет свои плюсы и минусы. В общем я старался раскрыть тему как можно лучше, но я капец спать хотел пока писал всё это, возможно где то сплоховал, по этому задавайте вопросы, я на них буду отвечать. ПРО ХОМЯКА ВОПРОСЫ ЗАПРЕЩЕНЫ

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...