Их можно изменять, но в таком случае Ваша версия будет модифицирована. Для этого добавляем/удаляем/редактируем достижение, далее в ядре версии удаляем папку META-INF, чтобы клиент не начал скачивать «повреждённые» файлы.
Но как же добавить свои, чтобы каждый, независимо от версии (выше 1.12, разумеется) мог играть с кастомными достижениями. К счастью разработчики сделали так, что теперь свои достижения можно хранить прямо в карте, прям как с ресурс-паками. Кастомные достижения проживают по следующему адресу —
saves/[сейв карты]/data/advancements/[категория достижений]/[достижение].json
С этим ясно, теперь рассмотрим структуру. В каждой ветке есть главное достижение, которое задаёт оформление и отправную точку для всех достижений, и собственно говоря сами достижения.
В папке с достижениями создаём папку и называем её на английской раскладке как душе угодно, название папки — это название категории достижений. Создаём файл с форматом JSON и называем тоже как душе угодно на английской раскладке. Чтобы выдать себе кастомное достижение через команду, нужно ввести —
/advancement grant only [категория]:[имя JSON файла]
Теперь рассмотрим собственно саму структуру достижений JSON формата
И посмотрим на уже готовое ванильное достижение для наглядности
Шаблон
null_advancements [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
ого