Aurora Plugins

AuroraCrafting·Updated 14 Oct 2026

API

Guide to use the API.

Recipes are called Blueprints. Every blueprint must belong to a workbench. You need Java 25 (AuroraCrafting 2.3.0+ targets Minecraft 26.2).

Integrating with quest/job plugins

The main thing here, if you are a developer of a quest/jobs plugin who wants to add support, is probably the BlueprintCraftEvent. This has who crafted it, what, and how many (getPlayer(), getItem(), getAmount(), getBlueprint()). Currently it is only fired for crafts in the custom crafting GUI, but it may be extended to the vanilla workstations later, so make sure to check what workbench is associated with the crafted blueprint. You usually only want to check for workbenches that are instances of the CustomWorkbenchclass.

Here is an example using AuroraQuests to demonstrate how can you integrate your quest/job plugin for crafting objectives:

@EventHandler
public void onCraft(BlueprintCraftEvent event) {
    // Assuming you handle vanilla crafting stations with bukkit events already.
    if (!(event.getBlueprint().getWorkbench() instanceof CustomWorkbench)) return;
        
    // Progress your quests/objectives
    AuroraQuestsProvider.getQuestManager().progress(
        event.getPlayer(),
        TaskType.CRAFT,
        event.getAmount(),
        Map.of("type", AuroraAPI.getItemManager().resolveId(event.getItem()))
    );
}

Registering your own blueprint

If you want to register blueprints, you have to use the RegistryLoadEvent. This event will be called every time the user reloads the plugin, and you have to register your blueprint every time as well. In here, you will have access to the WorkbenchRegistryalready, so you can either get the Workbenchyou need or create your own. You will also have access to the Book here, with all of the categories/subcategories already built. The book is not filled with blueprints at this time. You can create and add your own BookCategory.

Here is a snippet about how you would register a basic, shaped recipe to the vanilla crafting table:

@EventHandler
public void onRegistryLoad(RegistryLoadEvent event) {
    // Recipe book
    var book = AuroraCraftingPlugin.inst().getBook();
    // Workbench registry
    var registry = AuroraCraftingPlugin.inst().getWorkbenchRegistry();
    // Vanilla crafting table
    var table = registry.getCraftingTable();

    table.addBlueprint(
        BlueprintType.SHAPED,
        ShapedBlueprint.shapedBlueprint(table, "test")
                // Will automatically find the bounding box and create symmetrical recipes if possible, just like how vanilla does it.
                .symmetrical(true)
                // Vanilla options are optional. Be careful with the choice type option!
                .vanillaOptions(CraftingBlueprint.VanillaOptions.builder()
                        .group("test")
                        .category(CraftingBookCategory.MISC)
                        .choiceType(ChoiceType.ITEM_TYPE)
                        .build())
                // List of ingredients. It will be padded with air to have enough to fill every workbench slot.
                // Alternatively, you can use Blueprint#addIngredient to add them one by one.
                .ingredients(List.of(
                        new ItemPair(TypeId.fromString("mythicmobs:enchanted_diamond"), 32),
                        new ItemPair(TypeId.fromString("mythicmobs:enchanted_diamond"), 32),
                        new ItemPair(TypeId.fromString("mythicmobs:enchanted_diamond"), 32)
                ))
                // Completely optional
                .category(book.getCategory("category-id"))
                // Permission required to craft the blueprint. Also completely optional
                .permission("my.permission")
                // Result of the blueprint
                .result(new ItemPair(TypeId.fromString("eco:ecoitems:super_sword"), 1))
                // Make sure to always call this when you are done editing your blueprint!
                .complete()
        );
}

Other events

  • RegistryLoadedEvent - Fired after every workbench and blueprint is registered and the registries are frozen (on startup and on every reload). Use this if you need to read the final list of blueprints, for example via AuroraCraftingPlugin.inst().getBlueprintRegistry().

  • ItemsLoadedEvent - Fired once on startup, when every supported item plugin finished loading its items and AuroraCrafting is about to load its recipes.

Custom enchant merging

If your plugin provides custom enchantments, you can register a merger, so the enchants merge option also merges your enchants into the result item. The function receives the ingredient item and the result item and must return the result item.

CustomEnchantMerger.registerMerger("my-enchants", (ingredient, result) -> {
    // Copy/merge your custom enchants from the ingredient to the result here
    return result;
});

Add the API to your project

Replace {VERSION} with the version of the plugin you are using.

Maven

<repository>
    <id>auroramc</id>
    <url>https://repo.auroramc.gg/releases/</url>
</repository>
pom.xml
<dependency>
    <groupId>gg.auroramc</groupId>
    <artifactId>AuroraCraftingAPI</artifactId>
    <version>{VERSION}</version>
    <scope>provided</scope>
</dependency>

Gradle

Groovy DSL:

build.gradle
repositories {
    maven {
        url "https://repo.auroramc.gg/releases/"
    }
}

dependencies {
    compileOnly "gg.auroramc:AuroraCraftingAPI:{VERSION}"
}

Kotlin DSL:

build.gradle.kts
repositories { 
    maven("https://repo.auroramc.gg/releases/")
}

dependencies { 
    compileOnly("gg.auroramc:AuroraCraftingAPI:{VERSION}")
}