Скачать Advancement JS — Minecraft Моды — MetaMods
Advancement JS

Advancement JS

Активный

Установок

20

Последнее обновление

1 год назад

Версии

1.18.2 — 1.20.1
Клиент и сервер
Fabric
Forge
Игровые механики
Управление
Утилиты

AdvancementJS

Расширьте возможности системы достижений в Minecraft с помощью мощного инструмента KubeJS. Этот мод позволяет создавать, настраивать и управлять достижениями на совершенно новом уровне.

Быстрый пример (версия 2.9.3)

Скрипт запуска

// Создание пользовательского триггера
AdvJSEvents.trigger(event => {
    event.create("advjs:get_adv")
        // Количество условий должно соответствовать количеству проверок
        // В этом примере определены 2 условия
        .match(advancement => advancement.getId() == "minecraft:story/smelt_iron")
        .match(playerName => playerName == "Dev")
})

Серверный скрипт

AdvJSEvents.advancement(event => {
    const { PREDICATE, TRIGGER } = event;

    // Определение триггеров
    const jump5times = TRIGGER.tick(triggerBuilder =>
        triggerBuilder.addStat(Stats.JUMP, Stats.CUSTOM, { min: 5 }));
    const bred_in_nether = TRIGGER.bredAnimals(triggerBuilder => {
        triggerBuilder.setChildByPredicate(PREDICATE.entityFromJson({
            stepping_on: {
                dimension: "the_nether"
            }
        }))
    });
    // Пользовательский триггер AdvJS
    const destroy_dirt = TRIGGER.blockDestroyed(triggerBuilder => triggerBuilder.setBlock("dirt"));
    // Ваш собственный триггер
    const get_adv = TRIGGER.custom("advjs:get_adv");

    // Создание корневого достижения
    const root = event.create("advjs:hell")
        .display(displayBuilder => {
            displayBuilder.setTitle("AdvancementJS")
            displayBuilder.setDescription("Быстрый пример")
            displayBuilder.setIcon("diamond")
        })
        .criteria(criteriaBuilder => criteriaBuilder.add("dirt", destroy_dirt))
        .rewards(rewardsBuilder => {
            rewardsBuilder.setExperience(100)
            // Пользовательская награда AdvJS
            rewardsBuilder.addEffect("absorption", 200)
        })
        // Сделать повторяемым
        .repeatable();

    // Добавление дочернего достижения
    root.addChild("child1", childBuilder => {
        childBuilder
            .display(displayBuilder => {
                displayBuilder.setTitle(Text.red("Святое"))
                displayBuilder.setDescription(Text.red("Начинается ад"))
            })
            .criteria(criteriaBuilder => {
                // Стратегия 'OR' означает, что для получения достижения
                // достаточно выполнить одно из условий ниже
                criteriaBuilder.setStrategy(RequirementsStrategy.OR)
                criteriaBuilder.add("bred", bred_in_nether)
                criteriaBuilder.add("jump", jump5times)
                criteriaBuilder.add("get_adv", get_adv)
            })
            .rewards(rewardsBuilder => {
                rewardsBuilder.setRecipes("minecraft:lodestone", "minecraft:brewing_stand")
                rewardsBuilder.setExperience(100)
            })
    });

    // Удаление существующего достижения через фильтр
    // Можно удалить по ID: 'event.remove("minecraft:story/lava_bucket");'
    event.remove({
        mod: "minecraft",
        icon: "minecraft:lava_bucket",
        frame: "task"
    });

    // Изменение существующего достижения
    event.get("minecraft:story/smelt_iron")
        // Применение смещения для отображения
        .displayOffset(1, 1, true)
        .modifyDisplay(displayBuilder => displayBuilder.setIcon("diamond_pickaxe"))
        .addChild("child2", childBuilder => {
            childBuilder
                .display(displayBuilder => {
                    displayBuilder.setIcon("recovery_compass")
                    displayBuilder.setTitle('Я вернусь!')
                    displayBuilder.setDescription(Text.green("Удачи"))
                    // Смещение можно применить и в DisplayBuilder
                    displayBuilder.offset(-1, 0)
                })
                // Триггер также можно создать из JSON
                .criteria(criteriaBuilder => criteriaBuilder.add("go_back_to_home", TRIGGER.fromJson({
                    "trigger": "minecraft:changed_dimension",
                    "conditions": {
                        "from": "minecraft:the_end",
                        "to": "minecraft:overworld"
                    }
                })))
                // Проверка выполнения родительского достижения
                .requireParentDone()
        });
})

AdvJSEvents.lock(event => {
    event.result("stone_slab", "minecraft:story/smelt_iron");
    event.itemUse("spyglass", "minecraft:story/smelt_iron");
    event.blockInteract("chest", "minecraft:story/smelt_iron");
    event.entityInteract("villager", "minecraft:story/smelt_iron");
})

// Совместимость с 'Better Advancements'
AdvJSEvents.betterAdv(event => {
    event.modify("advjs:hell/child1").posX(0).posY(32).hideLines()
})

PlayerEvents.advancement(event => {
    const player = event.getPlayer();
    // Первый аргумент для проверки условий игрока, остальные - определенные вами условия
    CustomTriggers.of("advjs:get_adv").trigger(player, event.getAdvancement(), player.username)
})

Как перезагрузить

Просто используйте команду /reload

Основные возможности

  • Команда /advjs для генерации встроенных примеров
  • Создание пользовательских триггеров в событии запуска AdvJSEvents.trigger

Пользовательские триггеры AdvJS

  • blockDestroyed: срабатывает при разрушении блока игроком
  • playerTouch: активируется при касании игроком сущности
  • bossEvent: запускается при участии игрока в битве с боссом
  • increasedKillScore: срабатывает при убийстве сущности игроком

Пользовательские награды AdvJS

  • addEffect: предоставляет эффекты игроку

Дополнительные методы AdvJS

  • displayOffset(offsetX: number, offsetY: number, modifyChildren?: boolean) - применяет смещение к отображению достижения и его дочерним элементам
  • requireParentDone() - проверяет выполнение родительского достижения
  • requireOthersDone(requires[]: ...ResourceLocation) - проверяет выполнение указанных достижений
  • requireAnyDone(requires[]: ...ResourceLocation) - проверяет выполнение любого из указанных достижений

Совместимость

  • Поддержка мода Better Advancements через новое серверное событие AdvJSEvents.betterAdv
Участники проекта
westernat233

westernat233

Разработчик

Создан: 1 янв 2024

ID: 1776