В новой версии Minecraft 1.12 добавили возможность создавать свои достижения. Благодаря этому нововведению перед картоделами открываются новые грани. Но как же создать своё достижение или даже ветку достижений? На самом деле не сложно!! В связи с тем, что гайд писался ещё во время снапшота, некоторая информация может быть устаревшей, а писался он за тем, что в сети ещё не было русскоязычных гайдов. Сейчас же уже создана страница на русскоязычной ВИКИ, посвящённая достижениям 1.12+
Крайне рекомендую ознакомится с ней поподробнее - клацТеперь достижения записываются в JSON формате. Все ванильные достижения находятся в ядре версии по следующему пути - [версия].jar/assets/minecraft/advancements/[категория достижений]/[достижение].json
Их можно изменять, но в таком случае Ваша версия будет модифицирована. Для этого добавляем/удаляем/редактируем достижение, далее в ядре версии удаляем папку META-INF, чтобы клиент не начал скачивать "повреждённые" файлы.
Но как же добавить свои, чтобы каждый, независимо от версии (выше 1.12, разумеется) мог играть с кастомными достижениями. К счастью разработчики сделали так, что теперь свои достижения можно хранить прямо в карте, прям как с ресурс-паками. Кастомные достижения проживают по следующему адресу -
saves/[сейв карты]/data/advancements/[категория достижений]/[достижение].jsonС этим ясно, теперь рассмотрим структуру. В каждой ветке есть главное достижение, которое задаёт оформление и отправную точку для всех достижений, и собственно говоря сами достижения.В папке с достижениями создаём папку и называем её на английской раскладке как душе угодно, название папки - это название категории достижений. Создаём файл с форматом JSON и называем тоже как душе угодно на английской раскладке. Чтобы выдать себе кастомное достижение через команду, нужно ввести -
/advancement grant only [категория]:[имя JSON файла]
Теперь рассмотрим собственно саму структуру достижений JSON форматаИ посмотрим на уже готовое ванильное достижение для наглядностиШаблон
null_advancements.zip
[392 b]
Теперь подробнее о триггерах (название и описание):
название - описание - список возможных условий
minecraft:bred_animals - размножение животных - parent, partner, child
minecraft:brewed_potion - варка зелий - potion
minecraft:changed_dimension - перемещение между мирами - to, from
minecraft:construct_beacon - стройка маяка - level
minecraft:consume_item - использование предмета - item
minecraft:cured_zombie_villager - исцеление зомби-жителя - zombie, villager
minecraft:effects_changed - получение эффекта зелья - effects
minecraft:enchanted_item - зачарование предмета - item, levels
minecraft:enter_block - игрок в блоке (например в портале) - block, state
minecraft:entity_hurt_player - игрок получает урон от entity - damage
minecraft:entity_killed_player - entity убивает игрока - entity
minecraft:impossible - невозможное условие // Получить достижение можно только через команду
minecraft:inventory_changed - изменения в инвентаре - items, slots
minecraft:item_durability_changed - изменение прочности - item, durability, delta
minecraft:levitation - игрок в состоянии левитации - distance, duration
minecraft:location - локация игрока - biome, position, feature
minecraft:nether_travel - по возвращению из ада - distance
minecraft:placed_block - установка блока - block, location, state
minecraft:player_hurt_entity - игрок наносит урон entity - entity
minecraft:player_killed_entity - игрок убивает entity - entity, killing_blow
minecraft:recipe_unlocked - открытие рецепта - recipe
minecraft:slept_in_bed - игрок лёг на кровать - location
minecraft:summoned_entity - призыв мобов (големы, визер) - entity
minecraft:tame_animal - приручение животного - entity
minecraft:used_ender_eye - использование глаза энда - distance
minecraft:used_totem - использование тотема жизни - item
minecraft:villager_trade - торговля с жителем - item, villager
Немного о кондишинах (Извините за то, что увидите)
имя - тип - описание
biome - string - название биома
block - string - id блока
child{
type - string - тип моба
nbt - string - nbt настройки
} - блок условий
effects{
amplifer - integer, - сила
amplifer{
min, max - integer - минимальное и максимальное
} - блок условий
duration - integer, длительность
duration{ -
min, max - integer
} - блок условий
} - блок условий
damage{
blocked - boolean - удар блокирован
bypasses_armor - boolean - урон обошёл защиту брони
bypasses_invulnerability - boolean - урон обошёл неуязвимость
bypasses_magic - boolean - обход магии (? возможно эффекта защиты)
dealt - double - истинный урон, сумма урона, если бы игрок был без брони, эффекта и прочее
dealt{
min, max - integer
} - блок условий
is_explosion - boolean - урон от взрыва
is_fire - boolean - урон от огня
is_magic - boolean - урон от магии
is_projictile - boolean - урон от снарядов
source_entity{
type - string
effects { ранее было }
nbt - string
} - блок условий
taken - double - урон, который игрок получил
taken{
min, max - double
}
} - блок условий
distance - integer - дистанция
distance {
min, max - integer
} - блок условий
distance {
horizontal - integer - горизонтальное расстояние (? Возможно прямое, без учёта того, что игрок мог прыгать)
horizontal{
min, max - integer
} - блок условий
}
distance{
x,y,z - integer
x,y,z {
min, max - integer
} - блоки условий
} - блок условий
entity{
type - string
effects {было ранее}
nbt - string
distance {было ранее}
} - блок условий
feature - string - название строения
item{ - блок предмета
count - integer - кол-во
data - integer - дата предмета
enchantments{ - заклинания
enchantment{
levels - integer - уровень
levels {
min, max - integer
} - блок условий
} - блок условий
} - блок условий
item - string - id предмета
potion - string - id зелья
} - блок условий
items{
[
{ - тоже, что и блок item, но без тэга
- те же условия, что в item
} - блок условий
] - конец листа
} - блок условий
level - integer - уровень маяка
level{
min, max - integer
} - блок условий
levels - integer уровни заклинаний
levels{
min, max - integer
} - блок условий
parent{ - животное, кликнутое первым при размножении
type - string
effects {было ранее}
nbt - string
} - блок условий
partner{ - животное, кликнутое вторым при размножении
type - string
effects {было ранее}
nbt - string
} - блок условий
position{ - координаты
x,y,z - integer - координаты x,y,z
x,y,z{
min,max - integer
} - блоки условий
} - блоки условий
potion - string
recipe - string - рецепт
state{
- string - какая-то обновлённая штука, вот вики
} - блок условий
slots{ - слоты
empty - integer - кол-во пустых
empty{
min,max - integer
} - блок условий
full - integer - кол-во предметов в инвентаре
full{
min,max - integer
} - блок условий
occupied - integer - кол-во занятых слотов
occupied{
min,max - integer
} - блок условий
} - блок условий
villager{
distance{было ранее}
} - блок условий
zombie{
distance{было ранее}
} - блок условий
А вот кастомные достижения из превью
Внимание
Редактировать JSON файлы лучше в notepad++ с кодировкой UTF-8 (без BOM), иначе вместо русских символов будут знаки вопроса.
А если что-то не работает, то обязательно проверьте на ошибки при помощи JSON Parser
Надеюсь я смог донести Вам суть, я честно старался. Но если вы что-то не поняли, то спросите меня в комментариях или если понимаете хоть немного английский, почитайте статью на вики.
Русскоязычная страница на ВИКИ - клац
Жду критики, спасибо за внимание!