Advancement JS
Активный0.0
Установок
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