zh
切换语言
  1. PowerNukkitX
  2. 快速入门
  3. 服务器配置

    1. server.properties
    2. nukkit.yml
    3. pnx-cli-config.ini
    4. 反矿透
    5. 资源包加密
    6. 硬件加速压缩
    7. 使用WaterDogPE
    8. 超平坦世界
  4. FAQ

    1. 新人必看
    2. PNX-CLI教程
    3. 常见问题
    4. Terra问题
    5. 重生点问题
    6. 转换地图
  5. 开发者文档

    1. Java

      1. 跳转到JavaDoc
      2. Mod API

        1. 自定义方块
        2. 自定义物品
        3. 自定义实体
        4. 自定义附魔
      3. 生物AI

        1. 行为
        2. 记忆
        3. 传感器
        4. 运动控制器
        5. 寻路器
        6. 行为组
        7. 工作周期
    2. JavaScript

      1. 配置开发环境
      2. 基于LLSELib开发
      3. Hello World
      4. 基本知识
      5. 事件监听
      6. 常见开发问题
    3. API

      1. 简介
      2. 通用API
      3. Git-API
      4. 下载API
      5. 延迟返回API
      6. 插件API
    4. 实用资源

      1. 事件对照表
      2. 物品方块ID

2.自定义物品相关API

author: Cool_Loong

自定义物品相关的API统一在包cn.nukkit.item.customitem
实现自定义物品需要实现CustomItem接口,也可以通过选择继承内部已经实现好接口的一些基础自定义物品类来实现。

基础自定义物品

通过继承ItemCustom类可以实现一个普通的自定义物品,必须要覆写getDefinition方法,创建一个无参构造函数,调用父类构造函数传入:
String id
id是自定义物品的标识符,必须填写,形如pnx:test
String name
name是自定义物品显示的名称,可以为空,当为空时,自定义物品会从资源包中的texts文件夹下的语言文件中读取多语言文本,形如item.pnx:test=Test Item
String textureName
textureName是自定义物品的材质路径,必须填写,需要根据资源包中textures\item_texture.json相应的材质定义来填写

示例:

public class Test extends ItemCustom {
    public Test() {
        super("pnx:test", "Test 1", "test");
    }
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition.simpleBuilder(this, ItemCreativeCategory.EQUIPMENT).build();
    }
}

基础自定义工具

通过继承ItemCustomTool类可以实现一个普通的自定义工具,实现方式和上面类似。注意CustomItemDefinition需要使用toolBuilder,因为有特殊的接口。

示例:

public class MySword extends ItemCustomTool {
    public MySword() {
        super("powernukkitx:test_sward", "test sward", "test_sward");
    }
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition
                .toolBuilder(this, ItemCreativeCategory.EQUIPMENT)
                .allowOffHand(true)//允许副手使用
                .handEquipped(true)//决定了物品的手持方式
                .foil(true)//物品带有附魔效果
                .build();
    }
    public int getMaxDurability() {//定义最大耐久
        return 1000;
    }
    public int getTier() {//定义工具等级
        return ItemSwordDiamond.TIER_DIAMOND;
    }
    public int getAttackDamage() {//定义攻击伤害
        return 30;
    }
    public int getEnchantAbility() {//定义附魔能力
        return 20;
    }
    public boolean isSword() {//种类剑
        return true;
    }
}

基础自定义盔甲

通过继承ItemCustomArmor类可以实现一个普通的自定义盔甲。注意CustomItemDefinition需要使用armorBuilder,因为有特殊的接口。
同时,自定义盔甲需要在材质包中指定Attachables
示例:

public class MyArmor extends ItemCustomArmor {
    public MyArmor() {
        super("powernukkitx:pnx_armor", "pnx armor", "pnx_armor");
    }
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition
                .armorBuilder(this, ItemCreativeCategory.EQUIPMENT)
                .allowOffHand(true)
                .handEquipped(true)
                .build();
    }
    public boolean isChestplate() {
        return true;
    }
    public int getTier() {
        return ItemArmor.TIER_DIAMOND;
    }
    public int getMaxDurability() {
        return 666;
    }
    public int getEnchantAbility() {
        return 10;
    }
    public int getArmorPoints() {//盔甲防御力
        return 100;
    }
}

基础自定义食物

通过继承ItemCustomEdible类可以实现一个普通的自定义工具。注意CustomItemDefinition需要使用edibleBuilder,因为有特殊的接口。 同时ItemCustomEdible还必须实现方法public abstract Map.Entry<Plugin, Food> getFood();来定义食物属性,以供服务端注册食物Food

示例:

public class MyApple extends ItemCustomEdible {
    public MyApple() {
        super("powernukkitx:pnx_apple", "pnx apple", "apple");
    }
    public Map.Entry<Plugin, Food> getFood() {
        return Map.entry(MainPlugin.INSTANCE, new FoodMilk());
    }
    public CustomItemDefinition getDefinition() {
        return CustomItemDefinition.edibleBuilder(this, ItemCreativeCategory.ITEMS).build();
    }
}

继承自任意物品类实现自定义物品

通过继承自任意物品类实现CustomItem可以复用核心内部逻辑,实现某些特殊物品,例如自定义弓。
需要注意的是,实现CustomItem接口实现自定义物品,必须拥有一个无参构造函数,且按照以下示例定义。同时CustomItemDefinition必须使用customBuilder

示例:

public class MyCustomItem extends Item implements CustomItem {
    /**
     * 参数1:物品id必须为255即字符串物品ID
     * 参数2:默认meta值为0
     * 参数3:物品数量为1
     * 参数4:物品的名称,如果为null使用资源包中的多语言文本
     */
    public MyCustomItem() {
        super(ItemID.STRING_IDENTIFIED_ITEM, 0, 1, "test");
    }
    public String getTextureName() {//材质
        return "test";
    }
    public String getNamespaceId() {//物品标识符
        return "pnx:test";
    }
    public CustomItemDefinition getDefinition() {//物品定义
        return CustomItemDefinition.customBuilder(this,ItemCreativeCategory.EQUIPMENT).build();
    }
}

CustomItemDefinition相关API参见JavaDoc


© PowerNukkitX 开发组