Download Advancement JS — Minecraft Mods — MetaMods
Advancement JS

Advancement JS

Active

Downloads

20

Last update

1 year ago

Versions

1.18.2 — 1.20.1
Client and server
Fabric
Forge
Game mechanics
Control
Utils

AdvancementJS

Expand the capabilities of the achievement system in Minecraft with the powerful KubeJS tool. This mod allows you to create, configure, and manage achievements at a completely new level.

Quick Example (version 2.9.3)

Startup Script

// Creating a custom trigger
AdvJSEvents.trigger(event => {
    event.create("advjs:get_adv")
        // The number of conditions must match the number of checks
        // In this example, 2 conditions are defined
        .match(advancement => advancement.getId() == "minecraft:story/smelt_iron")
        .match(playerName => playerName == "Dev")
})

Server Script

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

    // Defining triggers
    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 custom trigger
    const destroy_dirt = TRIGGER.blockDestroyed(triggerBuilder => triggerBuilder.setBlock("dirt"));
    // Your own trigger
    const get_adv = TRIGGER.custom("advjs:get_adv");

    // Creating root achievement
    const root = event.create("advjs:hell")
        .display(displayBuilder => {
            displayBuilder.setTitle("AdvancementJS")
            displayBuilder.setDescription("Quick example")
            displayBuilder.setIcon("diamond")
        })
        .criteria(criteriaBuilder => criteriaBuilder.add("dirt", destroy_dirt))
        .rewards(rewardsBuilder => {
            rewardsBuilder.setExperience(100)
            // AdvJS custom reward
            rewardsBuilder.addEffect("absorption", 200)
        })
        // Make it repeatable
        .repeatable();

    // Adding child achievement
    root.addChild("child1", childBuilder => {
        childBuilder
            .display(displayBuilder => {
                displayBuilder.setTitle(Text.red("Holy"))
                displayBuilder.setDescription(Text.red("Hell starts"))
            })
            .criteria(criteriaBuilder => {
                // 'OR' strategy means that to get this achievement
                // you only need to fulfill one of the conditions below
                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)
            })
    });

    // Removing existing achievement through filter
    // Can be removed by ID: 'event.remove("minecraft:story/lava_bucket");'
    event.remove({
        mod: "minecraft",
        icon: "minecraft:lava_bucket",
        frame: "task"
    });

    // Modifying existing achievement
    event.get("minecraft:story/smelt_iron")
        // Applying display offset
        .displayOffset(1, 1, true)
        .modifyDisplay(displayBuilder => displayBuilder.setIcon("diamond_pickaxe"))
        .addChild("child2", childBuilder => {
            childBuilder
                .display(displayBuilder => {
                    displayBuilder.setIcon("recovery_compass")
                    displayBuilder.setTitle('I will come back!')
                    displayBuilder.setDescription(Text.green("Good luck"))
                    // Offset can also be applied in DisplayBuilder
                    displayBuilder.offset(-1, 0)
                })
                // Trigger can also be created from JSON
                .criteria(criteriaBuilder => criteriaBuilder.add("go_back_to_home", TRIGGER.fromJson({
                    "trigger": "minecraft:changed_dimension",
                    "conditions": {
                        "from": "minecraft:the_end",
                        "to": "minecraft:overworld"
                    }
                })))
                // Checking parent achievement completion
                .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");
})

// Compatibility with 'Better Advancements'
AdvJSEvents.betterAdv(event => {
    event.modify("advjs:hell/child1").posX(0).posY(32).hideLines()
})

PlayerEvents.advancement(event => {
    const player = event.getPlayer();
    // First argument for player condition checking, others - your defined conditions
    CustomTriggers.of("advjs:get_adv").trigger(player, event.getAdvancement(), player.username)
})

How to Reload

Simply use the /reload command

Main Features

  • /advjs command for generating built-in examples
  • Creating custom triggers in the startup event AdvJSEvents.trigger

AdvJS Custom Triggers

  • blockDestroyed: triggers when player breaks a block
  • playerTouch: activates when player touches an entity
  • bossEvent: triggers when player participates in a boss fight
  • increasedKillScore: triggers when player kills an entity

AdvJS Custom Rewards

  • addEffect: provides effects to the player

Additional AdvJS Methods

  • displayOffset(offsetX: number, offsetY: number, modifyChildren?: boolean) - applies offset to achievement display and its children
  • requireParentDone() - checks parent achievement completion
  • requireOthersDone(requires[]: ...ResourceLocation) - checks completion of specified achievements
  • requireAnyDone(requires[]: ...ResourceLocation) - checks completion of any specified achievements

Compatibility

  • Support for Better Advancements mod through new server event AdvJSEvents.betterAdv
Project members
westernat233

westernat233

Developer

Created: 1 Jan 2024

ID: 1776