Files
netease-bedrock-wiki/mcguide/27-手机网络游戏/课程10:使用Spigot开服/22-Spigot服自定义物品原理简介.md
2025-07-31 17:53:14 +08:00

2.4 KiB
Raw Permalink Blame History

front, hard, time
front hard time
入门 60分钟

Spigot自定义物品

简要原理

  • 基于目前Spigot服相关接口、自定义物品流程Spigot服的自定义物品实际上是原生Java物品的换皮物品客户端Mod利用字段java_identifier来标识

  • Geyser服加载客户端Mod后根据java_identifier字段记录自定义物品与原生Java物品的映射并在使用物品时调用原生物品相关的逻辑

  • 对于Spigot服来说自定义物品实际上还是原生Java物品不过相比于Java原生物品由自定义物品转换而来的物品会拥有额外数据用以标识

简要开发流程

  • 对于客户端Mod来说参照文档自定义物品,自定义客户端物品,与基岩版区别在于,额外加上java_identifier字段用于表示何种Java物品换皮
  • 对于Spigot插件来说根据Spigot相关接口构造ItemStack物品并实现相关逻辑
  • 详细步骤可参考Demo

Demo详解

详见文档自定义物品Demo详解

Q&A

  • 目前Mod由Geyser进行分发、预加载因此通过相同Geyser连接的玩家加载的Mod都相同加载到的自定义物品也相同

  • 目前自定义物品实际为Java原生物品换皮因此java_identifier字段与Spigot服实际创建的物品不一致时物品表现会存在问题

  • "java_identifier"字段取值为Java版物品的命名空间ID, 如自定义物品为木剑换皮,则填 "java_identifier" : "wooden_sword"

    更多物品命名空间ID详见官方WiKi

  • 由于配置中的Components有一部分为双端逻辑,因此此类Components的逻辑需要由Spigot插件实现直接在Json中配置无法生效或效果异常。目前已知不可用Component如下:

    - 基岩版自定义物品中用于物品防火的组件
    ```
    设置物品是否防火
    "netease:fire_resistant"{ "value" : true}
    ```
    
    - 基岩版自定义物品中用于物品是否可做燃料的组件
    ```
    设置物品是否可作为燃料
    "netease:fuel" { "value" : true}
    ```
    
    - 基岩版自定义物品中用于物品的使用间隔
    ```
    设置物品使用间隔
    "netease:cooldown" : { "duration" : 5}
    ```