> For the complete documentation index, see [llms.txt](https://thanhpahts-organization.gitbook.io/product-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thanhpahts-organization.gitbook.io/product-docs/ultimate-crafting/iii.-features.md).

# III. Features

### **1. Category System**

Categories are configured in categories.yml and stored as folders inside categories/.

For example:

| <p>categories/<br>├─ sword/<br>│ └─ diamond\_sword.yml<br>└─ armor/<br>└─ diamond\_chestplate.yml</p> |
| ----------------------------------------------------------------------------------------------------- |

The key sword in categories.yml should match the folder name categories/sword/.

### **2. Recipe Files**

Each recipe is a .yml file inside a category folder.

Basic structure:

```
id: diamond_sword
slot: 10
enabled: true
output:
  type: VANILLA
  material: DIAMOND_SWORD
  amount: 1
requirements:
  vanilla:
  - material: DIAMOND
    amount: 2
  - material: STICK
    amount: 1
  - material: SPRUCE_DOOR
    amount: 1
  mmoitems: []
  money: 0.0
  points: 25
  permission: ultimatecrafting.craft.diamond_sword
  placeholder: []
craft:
  success-rate: 100
  consume-items: true
  close-after-craft: false
editor:
  last-modified-by: Plugin

```

| Key                     | Meaning                                                   |
| ----------------------- | --------------------------------------------------------- |
| id                      | Unique recipe ID.                                         |
| slot                    | Slot in the category GUI.                                 |
| enabled                 | Whether the recipe is visible and usable.                 |
| output                  | Item given after crafting.                                |
| requirements            | Items, money, points, permission, and placeholder checks. |
| craft.success-rate      | Success chance from 0 to 100.                             |
| craft.consume-items     | Whether consumable requirements are taken.                |
| craft.close-after-craft | Whether the GUI closes after crafting.                    |

#### **a. Vanilla Output**

Use type: VANILLA for normal Minecraft items.

```
output:
  type: VANILLA
  material: DIAMOND_SWORD
  amount: 1
```

If the output item is a custom vanilla item created with another plugin, use Editor Mode and drag the item into the output slot. The plugin will automatically save NBTTag when needed.

```
output:
    type: VANILLA
    material: DIAMOND_SWORD
    NBTTag:
    ==: org.bukkit.inventory.ItemStack
    v: 3955
    type: DIAMOND_SWORD
    meta:
    ==: ItemMeta
    meta-type: UNSPECIFIC
    custom-model-data: 1001
    amount: 1
```

#### **b. MMOItems Output**

Use type: MMOITEM for MMOItems output.

```
output:
    type: MMOITEM
    item-type: SWORD
    id: DRAGON_SWORD
    amount: 1
```

The plugin builds the item from MMOItems using item-type and id. MMOItems output does not need NBTTag.

#### **c. Vanilla Requirements**

Vanilla requirements are configured under requirements.vanilla.

```
requirements:
    vanilla:
        - material: DIAMOND
        amount: 2
        - material: STICK
        amount: 1
```

Custom vanilla requirements can include NBTTag. When NBTTag exists, the player must have the exact matching item.

```
requirements:
    vanilla:
        - material: DIAMOND
        NBTTag:
        ==: org.bukkit.inventory.ItemStack
        v: 3955
        type: DIAMOND
        meta:
        ==: ItemMeta
        meta-type: UNSPECIFIC
        custom-model-data: 2001
        amount: 5
```

#### **d. MMOItems Requirements**

MMOItems requirements are configured under requirements.mmoitems.

```
requirements:
    mmoitems:
    - type: MATERIAL
    id: DRAGON_SCALE
    amount: 16
```

The plugin checks MMOItems requirements by type and id.

#### **e. Money, Points, Permission, And Placeholder Requirements**

```
requirements:
money: 5000
points: 25
permission: "ultimatecrafting.craft.dragon_sword"
placeholder: "%player_level% >= 50"
```

| Requirement | Dependency     | Meaning                                          |
| ----------- | -------------- | ------------------------------------------------ |
| money       | Vault          | Requires the player to have enough money.        |
| points      | PlayerPoints   | Requires the player to have enough PlayerPoints. |
| permission  | None           | Requires the player to have a permission node.   |
| placeholder | PlaceholderAPI | Requires a placeholder comparison to pass.       |

Set money or points to 0 to disable them. Leave permission empty to disable permission checking. Use an empty placeholder list or remove the placeholder key if no PlaceholderAPI condition is needed.

### **4. Editor Mode**

Editor Mode allows OP players to configure categories and recipes in-game.

Use:

| /ultimatecrafting editor |
| ------------------------ |

**Editor Mode supports:**

> Creating categories.
>
> Renaming categories.
>
> Deleting categories.
>
> Creating recipes.
>
> Setting recipe output by dragging an item into the output slot.
>
> Adding item requirements by dragging an item into an empty requirement slot.
>
> Setting money requirements.
>
> Setting PlayerPoints requirements.
>
> Setting permission requirements.
>
> Setting PlaceholderAPI requirements.
>
> Setting recipe success rate.
>
> Saving recipe changes.

When a chat input is required, type the requested value in chat. Type cancel to cancel the current action and return to the GUI.

### **5. Drag-And-Drop Item Detection**

When an item is dropped into the recipe editor:

MMOItems are detected automatically by MMOItems type and id.

Vanilla items are saved by material.

Vanilla custom items with metadata are saved with NBTTag.

This applies to both output items and item requirements.

### **6. Skull And Head Support**

GUI items with material: PLAYER\_HEAD support custom head configuration.

Use value for a base64 texture, texture URL, or raw texture hash:

```
buttons:
    back:
        slot: 49
        material: PLAYER_HEAD
        value: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6..."
        name: "&eBack"
        lore:
        - "&7Return to previous menu."
```

**Use player-head for a player skin:**

```
buttons:
    profile:
        slot: 10
        material: PLAYER_HEAD
        player-head: "Notch"
        name: "&ePlayer Head"
        lore: []
```

**Use hdb-id when HeadDatabase is installed:**

```
buttons:
    special:
        slot: 12
        material: PLAYER_HEAD
        hdb-id: "12345"
        name: "&eSpecial Head"
        lore: []
```

HeadDatabase is required only for hdb-id. It is not required for value or player-head.

### **7. Sounds**

Every button can define its own click sound.

```
sound:
    sound: UI_BUTTON_CLICK
    volume: 1.0
    pitch: 1.0
```

Area click sounds can be configured inside category-area and recipe-area.

```
category-area:
    sound:
    sound: UI_BUTTON_CLICK
    volume: 1.0
    pitch: 1.0
```

Main GUI can also use open-sound.

```
open-sound:
    sound: UI_BUTTON_CLICK
    volume: 1.0
    pitch: 1.0
```

### **8. CustomModelData**

GUI buttons and filler items support custom-model-data.

```
buttons:
    craft:
        slot: 40
        material: PAPER
        custom-model-data: 1001
        name: "&aCraft"
        lore:
        - "&7Click to craft."
        sound:
        sound: UI_BUTTON_CLICK
        volume: 1.0
        pitch: 1.0
```

Supported locations:

> buttons.\*
>
> fill-item
>
> fill-items.\*
>
> category-area
>
> recipe-area
>
> requirement-slots

Make sure your resource pack has a model override for the selected material and custom model data value.
