For Developers
Custom Features
Custom Items

When using custom items, players will need a resource pack containing all important texture data. Find out more about resource packs on wiki.bedrock.dev

Custom items

On PNX, you can create your own items. Make sure your resource pack contains all data like the textures.

Register a custom item

It is recommended to register your item while your plugin is loaded, but not enabled yet. You can register your item using

//Imports
import cn.nukkit.registry.RegisterException;
import cn.nukkit.registry.Registries;
 
//Later on, in your onLoad()
try {
    Registries.ITEM.registerCustomItem(this, MySword.class);
} catch (RegisterException e) {
    throw new RuntimeException(e);
}

Defining your item

This is the minimum setup for your custom item. You can extend it as you wish.

Weapon Example:

import cn.nukkit.item.Item;
import cn.nukkit.item.ItemDiamondSword;
import cn.nukkit.item.customitem.CustomItem;
import cn.nukkit.item.customitem.CustomItemDefinition;
import cn.nukkit.item.customitem.data.CreativeCategory;
import cn.nukkit.item.customitem.data.CreativeGroup;
import cn.nukkit.item.utils.ItemEnchantSlot;
 
 
public class MySword extends Item implements CustomItem {
    public MySword() {
        super("powernukkitx:test_sword");
    }
 
    @Override
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition
                .simpleBuilder(this)
                .creativeCategory(CreativeCategory.EQUIPMENT)
                .creativeGroup(CreativeGroup.SWORD)
                .texture("test_sword")
                .name("Sword")
                .allowOffHand(false)
                .handEquipped(true)
                .glint(true)
                .damage(30)
                .enchantable(ItemEnchantSlot.SWORD, 20)
                .durability(1000, 5, 30)
                .build();
    }
 
    @Override
    public int getTier() {
        return ItemDiamondSword.TIER_DIAMOND;
    }
}

Tool Example:

import cn.nukkit.item.Item;
import cn.nukkit.item.ItemDiamondSword;
import cn.nukkit.item.customitem.CustomItem;
import cn.nukkit.item.customitem.CustomItemDefinition;
import cn.nukkit.item.customitem.data.CreativeCategory;
import cn.nukkit.item.customitem.data.CreativeGroup;
import cn.nukkit.item.utils.DiggerEntry;
import cn.nukkit.item.utils.ItemEnchantSlot;
 
 
public class MyTool extends Item implements CustomItem {
    public MyTool() {
        super("powernukkitx:test_tool");
    }
 
    @Override
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition
                .simpleBuilder(this)
                .creativeCategory(CreativeCategory.EQUIPMENT)
                .creativeGroup(CreativeGroup.PICKAXE)
                .texture("test_tool")
                .name("My Tool")
                .allowOffHand(false)
                .handEquipped(true)
                .glint(true)
                .enchantable(ItemEnchantSlot.PICKAXE, 20)
                .durability(1000, 5, 30)
                .digger(
                        DiggerEntry.block("minecraft:coal_ore", 2),
                        DiggerEntry.create().speed(6).addAllWooden(),
                        DiggerEntry.create().speed(5).addTags("'my_custom_tag'")
                    )
                .build();
    }
 
    @Override
    public int getTier() {
        return ItemDiamondPickaxe.TIER_DIAMOND;
    }
}

Simple Item Example:

import cn.nukkit.item.Item;
import cn.nukkit.item.customitem.CustomItem;
import cn.nukkit.item.customitem.CustomItemDefinition;
import cn.nukkit.item.customitem.data.CreativeCategory;
 
 
public class MyItem extends Item implements CustomItem {
    public MyItem() {
        super("powernukkitx:test_item");
    }
 
    @Override
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition
                .simpleBuilder(this)
                .creativeCategory(CreativeCategory.ITEMS)
                .texture("test_item")
                .name("My Item")
                .allowOffHand(false)
                .handEquipped(true)
                .glint(true)
                .build();
    }
}

Need help?

If you need help, check out our Example plugin or join our discord server and ask for help.