Files
netease-modsdk-wiki/docs/mcguide/27-网络游戏/课程10:使用Spigot开服/22-Spigot服自定义物品原理简介.md
2025-03-18 14:46:12 +08:00

56 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
front:
hard: 入门
time: 60分钟
---
# Spigot自定义物品
## 简要原理
- 基于目前Spigot服相关接口、自定义物品流程Spigot服的自定义物品实际上是原生Java物品的换皮物品客户端Mod利用字段**java_identifier**来标识
- Geyser服加载客户端Mod后根据**java_identifier**字段记录自定义物品与原生Java物品的映射并在使用物品时调用原生物品相关的逻辑
- 对于Spigot服来说自定义物品实际上还是原生Java物品不过相比于Java原生物品由自定义物品转换而来的物品会拥有额外数据用以标识
## 简要开发流程
- 对于客户端Mod来说参照文档[自定义物品](../../20-玩法开发/15-自定义游戏内容/1-自定义物品/1-自定义基础物品.md),自定义客户端物品,与基岩版区别在于,额外加上**java_identifier**字段用于表示何种Java物品换皮
- 对于Spigot插件来说根据Spigot相关接口构造ItemStack物品并实现相关逻辑
- 详细步骤可参考Demo
## Demo详解
详见文档[自定义物品Demo详解](./30-Spigot服Demo详解/1-自定义物品Demo详解.md)
## Q&A
- 目前Mod由Geyser进行分发、预加载因此通过相同Geyser连接的玩家加载的Mod都相同加载到的自定义物品也相同
- 目前自定义物品实际为Java原生物品换皮因此当**java_identifier**字段与Spigot服实际创建的物品不一致时物品表现会存在问题
- "java_identifier"字段取值为Java版物品的命名空间ID, 如自定义物品为木剑换皮,则填 "java_identifier" : "wooden_sword"
更多物品命名空间ID详见[官方WiKi](https://zh.minecraft.wiki/w/%E7%89%A9%E5%93%81)
- 由于配置中的**Components**有一部分为双端逻辑,因此此类**Components**的逻辑需要由Spigot插件实现直接在Json中配置无法生效或效果异常。目前已知不可用**Component**如下:
- 基岩版自定义物品中用于物品防火的组件
```
设置物品是否防火
"netease:fire_resistant"{ "value" : true}
```
- 基岩版自定义物品中用于物品是否可做燃料的组件
```
设置物品是否可作为燃料
"netease:fuel" { "value" : true}
```
- 基岩版自定义物品中用于物品的使用间隔
```
设置物品使用间隔
"netease:cooldown" : { "duration" : 5}
```